#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致。 /// </summary> /// <param name="conStr">数据库连接串</param> /// <param name="strTableName">数据库中对应的表名</param> /// <param name="dtData">数据集</param> public static void SqlBulkCopyInsert(string conStr, string strTableName, DataTable dtData) { try { using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(conStr)) //引用SqlBulkCopy { sqlRevdBulkCopy.DestinationTableName = strTableName; //数据库中对应的表名 sqlRevdBulkCopy.NotifyAfter = dtData.Rows.Count; //有几行数据 sqlRevdBulkCopy.WriteToServer(dtData); //数据导入数据库 sqlRevdBulkCopy.Close(); //关闭连接 } } catch (Exception ex) { throw (ex); } } #endregion
使用SqlBulkCopy将DataTable中的数据批量插入数据库中
标签:dtd not throw 数据 public 表名 插入 数据集 数据库连接
小编还为您整理了以下内容,可能对您也有帮助:
如何通过SqlBulkCopy实现批量导入数据
1.本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。 2.代码如下: using System; using System.Data; using System.Windows.Forms; using System.Data.OleDb; namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //测试,将excel中的sheet1导入到sqlserver中 string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master"; System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog(); if (fd.ShowDialog() == DialogResult.OK) { ...
如何在SQL Server中批量导入数据
方案一、循环导入
实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高
方案二、使用Bulk插入
bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库,效率非常高
方案三:
利用SQLServer2008的新特性--表值参数(Table-Valued Parameter)。表值参数是SQLServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。
方案四:
对于单列字段,可以把要插入的数据进行字符串拼接,最后再在存储过程中拆分成数组,然后逐条插入。查了一下存储过程中参数的字符串的最大长度,然后除以字段的长度,算出一个值,很明显是可以满足要求的,只是这种方式跟第一种方式比起来,似乎没什么提高,因为原理都是一样的。
方案五:
考虑异步创建、消息队列等等。这种方案无论从设计上还是开发上,难度都是有的。
如何在SQL Server中批量导入数据
方案一、循环导入
实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高
方案二、使用Bulk插入
bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库,效率非常高
方案三:
利用SQLServer2008的新特性--表值参数(Table-Valued Parameter)。表值参数是SQLServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。
方案四:
对于单列字段,可以把要插入的数据进行字符串拼接,最后再在存储过程中拆分成数组,然后逐条插入。查了一下存储过程中参数的字符串的最大长度,然后除以字段的长度,算出一个值,很明显是可以满足要求的,只是这种方式跟第一种方式比起来,似乎没什么提高,因为原理都是一样的。
方案五:
考虑异步创建、消息队列等等。这种方案无论从设计上还是开发上,难度都是有的。
C#里怎样把一个DataTable的数据追加进数据
DataTable table = new DataTable();
//TODO: init table...
string connStr = "user id=" + dbInfo.UserName + ";data source=" + dbInfo.DBServerIP + ";persist security info=False;initial catalog=" + dbInfo.DatabaseName + ";password=" + dbInfo.Password;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn);
sqlBulkCopy.DestinationTableName = dbInfo.TableName;
sqlBulkCopy.WriteToServer(table);
sqlBulkCopy.Close();
asp.net设法得到的DataTable表,如何添入对应位置数据为空的sql数据库文件?(C#)
方法一、写代码循环DataTable每行,取出字段值,sql语句对应插入数据库中,具体代码就略了。
方法二、可以用SqlBulkCopy批量导入,命名空间:System.Data.SqlClient;
部分代码参考:
SqlConnection sqlConn = new SqlConnection(strConn);
sqlConn.Open();
SqlTransaction tran = sqlConn.BeginTransaction();
using (SqlBulkCopy oBC= new SqlBulkCopy (sqlConn,SqlBulkCopyOptions.Default, tran))
{
oBC.ColumnMappings.Add("factor1", "factor1"); //第一个参数为源数据列的字段,第二个参数为目标数据列的字段
oBC.ColumnMappings.Add("factor2", "factor2");
oBC.ColumnMappings.Add("factor3", "factor3");
oBC.DestinationTableName = "TaleName"; //TaleName为数据库中的表名
oBC.WriteToServer(oDataTable);//oDataTable为你的DataTable实例
tran.Commit();
sqlConn.Close();
}
希望对你有帮助。