我有100个Textbox的信息要提交到数据库中 有没有循环语句 可以批量提交 不需要一行代码提交一个数据
解决方案 »
- MVC4 里面 section featured 是什么意思?
- c# 读取ini 文件得不到里面的值怎么回事???
- 前两个帖子发的比较失败,都是300分,却都不超过20个人回答...
- 如何输出 百分数 并且不会四舍五入? 这也100哦!!!
- datagridview显示日期字段是出错的问题
- 关于文件夹重命名的问题??
- 一个什么代码也没有的*.aspx空白页也能显示版权信息!(郁闷中!)
- 求助:如何用C#读取码枪的值?读取条型码,回帖都有分送
- 怎么打开文本文件?用什么方法?我想看例子~~
- 请教各位,用C#能不能创建ocx工程?或者能创建什么工程来达到以前ocx的功能?
- oracle 怎么给某个字段赋值null
- gridControl加载EXCEL数据的问题。
/// <summary>
/// 带事务的批量操作数据。
/// </summary>
/// <param name="sqlInsert">SQL</param>
/// <returns>操作是否成功</returns>
public static bool OperateDatasWithTransaction(List<string> sqlList)
{
OracleConnection myConnection = new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnStrOrcl"]);
myConnection.Open();
OracleCommand myCommand = myConnection.CreateCommand();
OracleTransaction myTrans;
// Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
foreach (string item in sqlList)
{
myCommand.CommandText = item;
myCommand.ExecuteNonQuery();
}
myTrans.Commit();
return true;
}
catch (Exception)
{
myTrans.Rollback();
return false;
}
finally
{
myConnection.Close();
}
}
List<string>ooxx=new List<string>();
。aa//待处理数据
for(int i=0;i<100;i++)
{ooxx.Add(@"insert into tb values('"+aa[i]+"')");}
OperateDatasWithTransaction(ooxx);
.................
,...........
之不用BCP的时候,排错有点麻烦,另外数据库一旦增、删、修改了字段之后,你的程序就需要修改
string sql = @"
insert xxx;
insert xxx;
update xxx;
delete xxx;
";
SqlConnection con = new SqlConnection(Configurations.Conn);
con.Open();
SqlTransaction stion = con.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
SqlDataAdapter sdp = new SqlDataAdapter();
SqlCommand commselect = new SqlCommand();
commselect.Connection = con;
commselect.CommandText = "select password,Names,Address,Pid,Image from Users";
sdp.SelectCommand = commselect;//首先要指定selectitem,并且字段要指定清楚,和insert字段个数和名称一致
SqlCommandBuilder scom = new SqlCommandBuilder(sdp);
sdp.SelectCommand.Transaction = stion;
sdp.Fill(dt, "Users"); DataTable dts = dt.Tables["Users"].Clone();
DataRow dr = null;
for (int i = 1; i < 6; i++)
{
dr = dts.NewRow();
dr["Names"] = "Jeep" + i.ToString();
dr["password"] = i.ToString();
dr["Address"] = "第12" + i.ToString() + "街道";
dr["Pid"] = i + 8;
dr["Image"] = null;
dts.Rows.Add(dr);
}
//通过对表值的修改,实现方法Update(table)
dts.AcceptChanges();
foreach (DataRow row in dts.Rows)
row.SetAdded();
SqlParameter[] parsup = new SqlParameter[]
{
new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
,new SqlParameter("@password",SqlDbType.VarChar,20,"password")
,new SqlParameter("@Address",SqlDbType.VarChar,40,"Address")
, new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
,new SqlParameter("@Image",SqlDbType.Image,200,"Image")
};
SqlCommand commins = new SqlCommand();
commins.CommandText = "Insert into Users values(@Names,@password,@Address,@Pid,@Image)";
sdp.InsertCommand = commins;//insert com语句
sdp.InsertCommand.Transaction = stion;
commins.Parameters.AddRange(parsis);
SqlCommandBuilder icom = new SqlCommandBuilder(sdp);
Console.WriteLine( sdp.Update(dts));
dts.AcceptChanges();
}
catch (SqlException ex)
{
Console.WriteLine(ex.ToString());
stion.Rollback();
}
stion.Commit();
类似 INSERT INTO A(A1,A2,...,A100) VALUES('A1','A2',....,'A100') 是吧!
需要拼的是这么多字段.
你可以将控件的名称定义与数据库列名一样,通过循环读取页面上(窗体)的所有控件,最后拼成SQL.
如果界面上有不需要更插入的控件,则按一定的方式命名.如: A_A1 表示A1字段,只要是A_ 开头的均是需要插入数据库的,而其他开头的则不需要.不过再怎么会有上百个字段呢?即便有一条信息有这么多的字段,也应该分多个表来装载,按类别来分,这样根据不同需要查询时才会有较好的性能呀.
MS自带的控件也有这个了,可以去搞下