首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

2023-11-12 来源:华拓网

#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();

}

希望对你有帮助。

显示全文