如何将DataTable数据插入到数据库

runit 2009-09-09 10:17:00
DataTable 有两个字段,name, address,现在已经在表中保存6条数据。
数据库的 user 表有4个字段 id, name, address, time.其中id是数据库默认的自增加字段,time是插入新数据时的时间.
现在想将DataTable的6条数据批量插入到数据库,看了其他贴,感觉有些复杂,请问有什么比较简单的做法,做到效率最高?没有直接将表格数据插入的方法么?
...全文
823 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
me 2011-08-25
  • 打赏
  • 举报
回复
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;
   
string connectionString = "Data Source=HG-J3EJJ9LSW5PY;Initial Catalog=Test;User ID=sa;password=hg";
DataTable dataTable = sql_.select_datagrid(" select a from large where 1=0 ").Tables[0];
string passportKey;
for (int i = 0; i < 100000; i++)
{
passportKey = Guid.NewGuid().ToString();
DataRow dataRow = dataTable.NewRow();
dataRow[0] = passportKey;
dataTable.Rows.Add(dataRow);
}
SqlConnection sqlConnection = new SqlConnection(connectionString);
sqlConnection.Open();
SqlTransaction sqltran = sqlConnection.BeginTransaction();
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.KeepIdentity, sqltran);
sqlBulkCopy.DestinationTableName = "large";
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
if (dataTable != null && dataTable.Rows.Count != 0)
{
sqlBulkCopy.WriteToServer(dataTable);
}
sqlBulkCopy.Close();
sqltran.Rollback();
sqlConnection.Close();


详细出处参考:http://www.jb51.net/article/26347.htm
chenwei175528 2009-09-09
  • 打赏
  • 举报
回复
mark and up and study
omhhw 2009-09-09
  • 打赏
  • 举报
回复

OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "Insert into Caidan (Name,Cat,Price,Date) Values ('" + 内容1 + "','" + 内容2 + "','" + 内容3 + "','" + 内容4 + "')";
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();

遍历table里面的内容,取出后用循环替换内容1~内容4,如果一次性更新的数据量小这样做似乎方便些。
assky124 2009-09-09
  • 打赏
  • 举报
回复

/// <summary>
/// 填充数据表,原来的会被清空
/// </summary>
/// <param name="sqlSconn">执行语句:“select * form Tabel1 where 1 = 2”</param>
public virtual void DataFill(string sqlSconn)
{

this.myTable = new DataTable();
myAdapter=new OleDbDataAdapter(sqlSconn,dbconn);
OleDbCommandBuilder myBuilder=new OleDbCommandBuilder(myAdapter);
myAdapter.Fill(myTable);
this.s_baseConnSql = sqlSconn;
}

/// <summary>
/// 数据回写
/// </summary>
public void SaveChanges()
{
//myAdapter.Fill(this.Table);
myAdapter.Update(myTable);
myTable.AcceptChanges();
}

SQL77 2009-09-09
  • 打赏
  • 举报
回复
直接用ADAPTER.UPDATE(DATASETNAME,"NAME")
runit 2009-09-09
  • 打赏
  • 举报
回复
2楼的是我看过的方法,其中 dataAdapter.Fill(dataSet); 有个疑问,如果数据库里有上千条数据,此时运行该句后,会Fill多少数据到dataset中?
我本来是要往库里存数据,现在这种方法先要取数据,感觉是否效率低些,是这样么?

1楼你说的那个操作内存表,能给个代码示例么?
谢谢楼上两位
我不懂电脑 2009-09-09
  • 打赏
  • 举报
回复
一般把datatable放到dataset里然后用DataAdapter更新数据库

static private DataSet CreateCommandAndUpdate(
string connectionString,
string queryString)
{
DataSet dataSet = new DataSet();

using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter dataAdapter =
new OleDbDataAdapter();
dataAdapter.SelectCommand =
new OleDbCommand(queryString, connection);
OleDbCommandBuilder commandBuilder =
new OleDbCommandBuilder(dataAdapter);

dataAdapter.Fill(dataSet);

// Code to modify data in the DataSet here.

//Without the OleDbCommandBuilder this line would fail.
dataAdapter.Update(dataSet);
}
return dataSet;
}

风之影子 2009-09-09
  • 打赏
  • 举报
回复
循环插入就可以了.

这个复杂吗?

可以操作内存表,插入就没有问题吧.

风之影子 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 runit 的回复:]
2楼的是我看过的方法,其中 dataAdapter.Fill(dataSet); 有个疑问,如果数据库里有上千条数据,此时运行该句后,会Fill多少数据到dataset中?
我本来是要往库里存数据,现在这种方法先要取数据,感觉是否效率低些,是这样么?

1楼你说的那个操作内存表,能给个代码示例么?
谢谢楼上两位
[/Quote]


你datatable是那来的.不是内存表吗?
是的话,你循环提取进行插入就行.

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧