Sql server 使用参数化创建动态SQL的VB.net循环

Sql server 使用参数化创建动态SQL的VB.net循环,sql-server,vb.net,sql-parametrized-query,Sql Server,Vb.net,Sql Parametrized Query,我在一个vb.net项目中有一个循环,它生成了我想要参数化的动态SQL。我计划每10条记录调用一次运行SQL语句的sub,因为我听说一次执行一条SQL语句要慢一些。那么,如果参数在循环中每次都在更改,那么如何每10条记录提交一次SQL查询呢?我意识到我可以在变量名后面加上x.ToString,在列表中有20个变量,但我不知道是否有一种我忽略的“正确”方法。下面是一个非常精简的代码示例 For _x As Integer = 0 To _dataset.Tables(_x).Rows.Count

我在一个vb.net项目中有一个循环,它生成了我想要参数化的动态SQL。我计划每10条记录调用一次运行SQL语句的sub,因为我听说一次执行一条SQL语句要慢一些。那么,如果参数在循环中每次都在更改,那么如何每10条记录提交一次SQL查询呢?我意识到我可以在变量名后面加上x.ToString,在列表中有20个变量,但我不知道是否有一种我忽略的“正确”方法。下面是一个非常精简的代码示例

For _x As Integer = 0 To _dataset.Tables(_x).Rows.Count - 1
    _sql &= "INSERT INTO test (col1, col2) VALUES (@col1, @col2) "
    _parameters.Add(new parameter("@col1", <variable data>) // changes every time through loop
    _parameters.Add(new parameter("@col2", <variable data>) // changes every time through loop

    If _x Mod 10 = 0 Then
        Call executeSQL(_sql, _parameters)
    End If
Next
对于x As Integer=0到dataset.Tables(x).Rows.Count-1
_sql&=“插入测试(col1,col2)值(@col1,@col2)”
_parameters.Add(新参数(“@col1”)//通过循环每次都会更改
_parameters.Add(新参数(“@col2”,)//通过循环每次都会更改
如果x Mod 10=0,则
调用executeSQL(\u sql,\u参数)
如果结束
下一个

< /代码>几乎不可能创建一个适合所有用途的查询助手。一方面,数据类型对于您的值集合来说可能是不同的。当然,在数据适配器和数据表中可用的内置功能不应该被忽略,而不是把一个大字符串拼凑起来,考虑包装<代码>NSERT
语句在事务中,以
SET NOCOUNT ON
作为前缀。如果您有许多行,并且您的表支持它,请使用
SqlBulkCopy
。这两个选项都比手动构造成批指令的代码更可靠。“我想我听说一次执行一行指令要慢。”??那么您是根据您认为听到的内容编写代码的?这里的问题是,您每次都要执行一个插入。这些值来自何处?可能使用表参数会更有效,这样您就不必执行几十个、数百个甚至数千个单独的插入。我不太确定重复的插入一行的rts比一行10行的插入慢。在查询之间需要一个“;”,并且您可能必须增加变量数,因为如果col1、col2多次出现,数据将是相同的。此外,“我想我听说一次执行1会更慢”你试过了吗?你知道这在你的情况下是不是真的吗?几乎不可能创建一个一刀切、通用的查询帮助器。首先,数据类型对于你的值集合可能完全不同……当然,DataAdapters和DataTables中可用的内置功能不应该被忽略,而应该忽略对一个大的字符串进行合并,考虑在事务中包装<代码> INSERT /COD>语句,在中添加<代码> SET NOUNCUT。如果您有许多行,并且表支持它,请使用<代码> SqLBulkPase< /Cord>。这两个选项都比代码更健壮,以手动构建批次指令。“我想我听说一次做一个比较慢"??那么您是根据您认为听到的内容编写代码的?这里的问题是,您每次都要执行一个插入。这些值来自何处?可能使用表参数会更有效,这样您就不必执行几十个、数百个甚至数千个单独的插入。我不太确定重复的插入一行的rts比一行10行的插入慢。在查询之间需要“;”,并且您可能必须增加变量数,因为如果col1、col2有多次,数据将是相同的。另外,“我想我听说一次做一行要慢”您试过了吗?您知道这在您的情况下是否正确吗?