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

runit 2009-09-09 10:17:00
DataTable 有两个字段,name, address,现在已经在表中保存6条数据。
数据库的 user 表有4个字段 id, name, address, time.其中id是数据库默认的自增加字段,time是插入新数据时的时间.
现在想将DataTable的6条数据批量插入到数据库,看了其他贴,感觉有些复杂,请问有什么比较简单的做法,做到效率最高?没有直接将表格数据插入的方法么?
...全文
855 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是那来的.不是内存表吗?
是的话,你循环提取进行插入就行.
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 在C#编程环境中,将存储于DataTable中的大量数据传输至数据是一项常规的数据管理任务。本文的核心议题是如何将保存在Access数据内的员工考勤记录同步至SQL Server数据平台。鉴于所处理的数据规模相当可观(最高可达40万条数据记录),采用逐条插入数据传输方式显然难以满足效率要求,因此文章提出了一种批量数据传输的解决方案,该方案具体运用了C#的SqlBulkCopy组件以达成高效的数据批量处理目标。文章阐述了如何从Access数据获取数据并填充至DataTable对象中。此过程是通过定义一个方法,即OleGetDataTable,来完成的。该方法借助OleDbConnection与OleDbDataAdapter与Access数据进行交互,并且依据配置文件中指定的数据连接字符串来建立连接。具体实施时,首先从配置文件中读取数据连接字符串,随后创建一个OleDbConnection对象用以建立与数据的连接,再创建一个OleDbDataAdapter对象执行SQL查询指令并将结果集填充到DataTable中。文章详尽说明了如何将DataTable中的数据批量传输至SQL Server数据。这一过程是通过实现一个名为DataTableToSQLServer的方法来执行的。在该方法中,运用SqlBulkCopy组件以实现迅速的数据导入。SqlBulkCopy是.NET Framework中提供一个专用于高效地将数据从一个数据源(比如DataTable)批量复制到SQL Server数据的指定表中的组件。在使用SqlBulkCopy时,必须确认目标表已经存...

111,130

社区成员

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

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

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