Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#表数据插入SQL Server表_C#_Tsql_Datatable - Fatal编程技术网

将C#表数据插入SQL Server表

将C#表数据插入SQL Server表,c#,tsql,datatable,C#,Tsql,Datatable,是否可以使用存储过程将C#中的System.Data.DataTable批量插入SQL Server表并将该表作为参数传递 该表没有固定数量的记录。是的,有一种方法: DataTable dataTable = null; // your data needs to be here try { ConnectionStringSettings mConString = ConfigurationManager.Connect

是否可以使用存储过程将C#中的System.Data.DataTable批量插入SQL Server表并将该表作为参数传递

该表没有固定数量的记录。

是的,有一种方法:

        DataTable dataTable = null; // your data needs to be here
        try
        {
            ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["SiteSqlServer"];

            // Optional truncating old table
            using (SqlConnection connection = new SqlConnection(mConString.ConnectionString))
            {
                connection.Open();
                // Delete old entries
                SqlCommand truncate = new SqlCommand("TRUNCATE TABLE MYTABLE", connection);
                truncate.ExecuteNonQuery();
            }

            SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
                                          {
                                              DestinationTableName = "dbo.MYTABLE",
                                              BatchSize = 100000,
                                              BulkCopyTimeout = 360
                                          };
            bulkCopy.WriteToServer(dataTable);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
请尝试批量大小-100000对我来说是好的-它不应该大于那个值-否则速度可能会下降。BatchSize不会限制您的数据—它只是将发送到sql server的每个“数据包”的大小

SiteSQLServer应位于app.config或web.config中。如果没有,您需要在此处更改参数


请将MYTABLE更改为您的表名。

在2008年之前的SQL Server版本中,将整个数据表推送到SQL Server的唯一方法是。您必须将所有数据推入(可能是临时的)暂存表,并调用该过程来处理暂存数据

在SQLServer2008中,引入了表值用户定义类型。它们提供了一些很好的新选项来处理数据集

看看MSDN:

也许在我的两篇博文中有一秒钟:


哪个版本的SQL Server?2008年?当然,速度较慢(但不是太多),但功能更强大,因为不需要暂存台Hi Florian,只是尝试运行类似的东西,但它不起作用。。。使用冒险作品;GO/*创建用户定义的表类型*/创建类型LocationTableType作为表(LocationName VARCHAR(50),CostRate INT);如果我的SQL Server中有AdventureWorks数据库,我是否应该能够创建新类型?我只是得到这个错误。。。Msg 156,15级,状态1,第3行关键字“AS”附近语法不正确。谢谢,请尝试:“打印@@VERSION;”。它是否返回SQL Server 2008或其他版本?如果是2008年,请检查数据库属性以获取兼容模式版本“10”确定,我们使用的是2005。。。所以我必须使用另一种解决方案,对吗?SQLBulkCopy…所以SQLBulkCopy是goAndread的最佳方式,这很好,但是如果您有一个顽固的DBA,他不授予批量插入权限,该怎么办。。???那么这就行不通了。但这不是问题所在。。。应启用大容量插入以使用此参数,这是默认值。@MethodMan您可以将
数据表
作为
存储过程参数
(用户定义的表类型)传递。但您将失去
SqlBulkCopy