问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将DataTable更新到数据库中

发布网友 发布时间:2022-04-07 22:52

我来回答

2个回答

懂视网 时间:2022-04-08 03:13

要将datatable 批量更新到数据表其实是两步:

(1)将datatable快速存入一个表中;

(2)根据一个数据表更新另外一个数据表;

下面细说:

(1)将datatable快速存入一个表中;

1)   insert循环插入;
2)   sqldataadapter.update(dataset,tablename);
3)   sqlbulkcopy.WriteToServer(datatable);

1、生成测试的datatable表,表结构如下:
UniqueID(主键,自动增长)   |   CompanyName   |   CompanyCode   |   Address   |   Owner   |   Memo
共6个字段。

SqlConnection sqlconnection = new SqlConnection(connectionString);

SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from Table_1 where 1=2", sqlconnection);

DataSet dataset = new DataSet();

sqldataadapter.Fill(dataset, "Table_1");

DataTable datatable = dataset.Tables[0];

//生成20000条记录

for (int i = 0; i < 20000; i++)

{

      DataRow datarow = datatable.NewRow();

      datarow["CompanyName"] = "companyname"+string.Format("{0:0000}",i);

      datarow["CompanyCode"] = "companycode" + string.Format("{0:0000}", i);

      datarow["Address"] = "address" + string.Format("{0:0000}", i);

      datarow["Owner"] = "owner" + string.Format("{0:0000}", i);

      datarow["Memo"] = "memo" + string.Format("{0:0000}", i);

      datatable.Rows.Add(datarow);

}


2、使用sqlcommand.executenonquery()方法插入

foreach (DataRow datarow in datatable.Rows)

{

string sql = "INSERT INTO [Table_1]([CompanyName],[CompanyCode],[Address],[Owner],

)" +

"VALUES(‘" + datarow["CompanyName"].ToString() + "‘" +

",‘" + datarow["CompanyCode"].ToString() + "‘" +

",‘" + datarow["Address"].ToString() + "‘" +

",‘" + datarow["Owner"].ToString() + "‘" +

",‘" + datarow["Memo"].ToString() + "‘)";

   using (SqlConnection sqlconn = new SqlConnection(connectionString))

   {

   sqlconn.Open();    SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);

   sqlcommand.ExecuteNonQuery();

   sqlconn.Close();

   }

}

插入20000条记录时间:00:00:29.7336000

3、使用sqldataadapter.update(dataset,tablename);

SqlCommand insertcommand = new SqlCommand("INSERT INTO [Table_1]([CompanyName],[CompanyCode],[Address],[Owner],

)" +

"VALUES(@CompanyName, @CompanyCode,@Address,@Owner,@Memo)",new SqlConnection(connectionString));

insertcommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 50, "CompanyName");

insertcommand.Parameters.Add("@CompanyCode", SqlDbType.NChar, 25, "CompanyCode");

insertcommand.Parameters.Add("@Address", SqlDbType.NChar, 255, "Address");

insertcommand.Parameters.Add("@Owner", SqlDbType.NChar, 25, "Owner");

insertcommand.Parameters.Add("@Memo", SqlDbType.NChar, 255, "Memo");

sqldataadapter.InsertCommand = insertcommand;

sqldataadapter.Update(dataset, "Table_1");

插入20000条记录时间:00:00:22.8938000

使用sqlbulkcopy.writetoserver(datatable)

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);

sqlbulkcopy.DestinationTableName = "Table_1";//数据库中的表名

sqlbulkcopy.WriteToServer(dataset.Tables[0]);

插入20000条记录时间:00:00:00.3276000

所以说速度是sqlbulkcopy最快,sqldataadapter.update()次之,sqlcommand.ExecuteNonQuery()最慢。

 

 (2)根据一个数据表更新另外一个数据表;

UPDATE A SET A.a=B.a FROM B WHERE A.b = B.b

代码的意思是根据数据表A中的b列与B中的b列之间的比较来更新  A中的a列

 

^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^

欢迎来我的淘宝店【老李飞充】,话费充值优惠靠谱,http://chinatrust.taobao.com

^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^

 

SQL快速操作技巧2_datatable批量更新到数据表

标签:

热心网友 时间:2022-04-08 00:21

SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds, "Titles");

//插入记录
DataTable table = ds.Tables["Titles"];
DataRow row = table.NewRow();
row["Title_id"] = "JP1001";
row["title"] = "programming Microsoft .NET";
row["price"] = 59.99m;
row["ytd_sales"] = 100000;
row["type"] = "business";
row["pubdate"] = new DateTime(2002, 5, 1);
table.Rows.Add(row);
//更新数据库
adapter.Update(table);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
奥迪a6l怎么用手机连接音响放歌,我的是华为 奥迪a6l蓝牙连接了,听歌没声音 2009年6月在农业银行办理30万等额本息为10年的商业房贷,7折,现在月供... 存量房贷七折七折政策 ...在农业银行贷款27万,等额本息打七折利率按揭20年,现在的利率每月应还... 我是第一套房,在农业银行不是公积金贷款27万元20年付清利息怎么算法... 在成都交通违章网上怎么办理的 成都违章罚款网上怎么交 成都交通违章罚款在哪里交 成都违章停车可以网上交罚款吗 本田飞度油耗多少?本田飞度每公里耗油量多少? 1.5手动飞度百公里实际油耗 解决飞度油耗高的原因 大家都夸第四代飞度超级省油省心,是真的吗? 飞度百公里油耗多少? 飞度的油耗如何?求真实数据? 飞度油耗 焊工培训班多少钱呢? 苹果手机录制视频怎么没有声音了 9.18刚好是过生日朋友圈什么发才好? 今天我过生日想发一段祝自己生日的一段话朋友圈几点发合适 过生日的朋友圈可以提前或者推后发么? 生日时间在朋友圈公开好吗 18岁生日什么时候发朋友圈 8号过生日几点发朋友圈合适 荥阳河阴石榴几月成熟? 正宗的会理软籽石榴上市了没,有人知道不 百榴农业河阴软籽石榴中秋节可以吃到吗 百榴农业的河阴软籽石榴什么时候上市 幽默笑话之北京朝阳区传媒大学附近哪有鸡,已经笑喷了 学小易搜高数题总是乱码怎么办?急急急 高数答案怎么搜 什么软件可以拍大学的题目并搜题。如高数之类? 站久了会胃痛是怎么回事啊? 为什么站久了会胃痛呢? 平时站久了或走路走很久后会胃痛(貌似是胀痛),其他的时候不会痛,不吃饭的时候也不会痛,请问是什么原 站久了胃疼 想带孩子一起出去露营,要做哪些准备? 我为什么站久了胃会痛 我的胃经常抽着疼,站久了会疼,偶尔吃饭迟了,或者饿的久了都会抽的疼,请问这是怎么回事?会引发胃癌吗 周末全家人想去露营,请问外出露营哪些是必备的? 为什么我有时站的久了,或者走路久了会胃疼 带五岁的孩子露营应注意什么 有时候站的时间长了就感觉胃不舒服... 不知道为什么胃不舒服,站着就有点胃不舒服 站久了胃就难受 为什么有时站得久胃就不舒服呢? 我经常早上逛街的时候逛着逛着就胃部不舒服,也就是站久了,胃疼死了,这是胃病吗?能治好吗? 站久了肚子痛,大概是胃痛是为什么 为什么坐久了站起来胃上面一阵痛