Sql server 在数据表VB.NET中插入/更新行

Sql server 在数据表VB.NET中插入/更新行,sql-server,database,vb.net,datatable,Sql Server,Database,Vb.net,Datatable,我遇到了一段代码的问题,该代码应该在TypedTable上加载数据库表,并在更新部分插入(或者更新,如果密钥已经存在),尽管我的代码运行非常慢 现在,我处理的大多数表都需要完全刷新,因此我使用一个简单的AddTableRow(row)过程擦除数据并重新添加typedtable中另一个表中的所有内容,该过程工作正常,但当我需要更新数据时,我使用LoadDataRow(row,fAcceptChanges)函数,即使使用.BeginLoadData()->.EndLoadData()它也会变得非常慢

我遇到了一段代码的问题,该代码应该在TypedTable上加载数据库表,并在更新部分插入(或者更新,如果密钥已经存在),尽管我的代码运行非常慢

现在,我处理的大多数表都需要完全刷新,因此我使用一个简单的
AddTableRow(row)
过程擦除数据并重新添加typedtable中另一个表中的所有内容,该过程工作正常,但当我需要更新数据时,我使用
LoadDataRow(row,fAcceptChanges)
函数,即使使用
.BeginLoadData()->.EndLoadData()
它也会变得非常慢(每秒更新2/3次),因为一个表包含大约500k行数据(每行大约有15列)

我对vb.net还很陌生,所以我对更新datatable的方法不太了解,但是如果有人知道任何加速的方法,我真的很高兴听到关于它的一切

更多信息:

我逐行插入数据的主要原因是,我需要检查表的约束,以便处理从插入部分引发的例外,再加上
TypedDataTable
的自动约束检查,考虑到我必须处理超过10 db的表,这非常好

我的更新代码如下所示:

Table=Parser.GetData()
TypedTable=TableAdapter.GetData()
对于表中的每一行
尝试
Dim TypedRow=TypedTable.NewRow()
LoadNotTypedIntoTyped(行,TypedRow)
TypedTable.BeginLoadData()
TypedTable.LoadDataRow(TypedRow.ItemArray,True)'TODO加速此操作
TypedTable.EndLoadData()
特例
'此处的通用异常处理
结束尝试
下一个
SqlBulkCopyLoadProcedure()

我找到了解决我的特殊问题的好办法;使用typedtable意味着我对表约束有更多的控制,因为我的数据源与DB表相关,所以我创建了一个新的空类型表来加载新数据,然后从DB和
Table1加载当前数据。合并(Table2)
来合并数据

在我的例子中,这是可能的,因为我处理的od数据量不太大(大约500k条记录),如果内存出现问题,我认为可行的解决方案是创建一个支持表并直接使用SQL进行合并,但我是DB新手,所以如果我在这里出错,请反驳我

我所做的代码:

Dim SupportTable As TypedTable=MyTypedTable.Clone()
对于TableToLoad中的每一行
Dim NewTypedRow=SupportTable.NewRow()
对于列中的每个列
'加载每一列
下一个
SupportTable.AddTypedRow(新TypeDrow)
下一个
TypedTable.Merge(SupportTable)
TypedTable.AcceptChanges()
'加载到数据库

我找到了解决我的特殊问题的好办法;使用typedtable意味着我对表约束有更多的控制,因为我的数据源与DB表相关,所以我创建了一个新的空类型表来加载新数据,然后从DB和
Table1加载当前数据。合并(Table2)
来合并数据

在我的例子中,这是可能的,因为我处理的od数据量不太大(大约500k条记录),如果内存出现问题,我认为可行的解决方案是创建一个支持表并直接使用SQL进行合并,但我是DB新手,所以如果我在这里出错,请反驳我

我所做的代码:

Dim SupportTable As TypedTable=MyTypedTable.Clone()
对于TableToLoad中的每一行
Dim NewTypedRow=SupportTable.NewRow()
对于列中的每个列
'加载每一列
下一个
SupportTable.AddTypedRow(新TypeDrow)
下一个
TypedTable.Merge(SupportTable)
TypedTable.AcceptChanges()
'加载到数据库

我忘了提到我处理的列表包含关于硬件/软件的信息,包括代码、说明、价格等。因此我使用硬件/软件代码作为主键处理表,这是一个字母数字字符串我忘了提到我处理的列表包含关于硬件/软件的信息,包括代码、说明、,所以我使用硬件/软件代码作为主键处理这个表,这是一个字母数字字符串