从VB.Net应用程序插入40列新记录的最佳方法

时间:2009-02-20 10:46:43

标签: .net sql-server database

我的一位同事正在研究.NET应用程序。他需要为他的对象写下他的保存功能。

通常他会在SQL Server中使用存储过程来执行此操作,但是使用40列这是一项非常重要的任务。

我们的其他几位同事都倾向于使用XSD进行数据库交互。

在处理大型记录时,将尽最大努力,可维护性和效率进行权衡取舍?

4 个答案:

答案 0 :(得分:1)

一种对我有用的方法是创建一个存储过程,它接受一个参数 - 一个xml字符串。然后你可以使用sql工具中的构建来xpath到字符串中的数据,或者只是将其解析出来。

说你的xml看起来像这样:

<data>
<col1 value="myVal">
<col2 value="myVal2">
<col3 value="myVal3">
</data>

你的sproc看起来像这样:

Create Procedure InsertData @xml xml
as

DECLARE @hDoc int
--Prepare input values as an XML documnet
exec sp_xml_preparedocument @hDoc OUTPUT, @xml

Insert Into MyTable(col1,col2,col3)
select col1,col2,col3
from OPENXML(@hdoc,'/data/')
WITH (col1 varchar(100) '/data/col1/@value', col2 varchar(100) '/data/col2/@value', col3 varchar(100) '/data/col3/@value')
EXEC sp_xml_removedocument @hDoc

GO

你在这里看到更多: http://technet.microsoft.com/en-us/library/ms187897.aspx

答案 1 :(得分:0)

XSD不会影响应用和广告之间的通信。 D b。 你用什么来与db通信? DataAdapters?您应该在命令中使用值的参数。然后,您可以使用直接表访问或存储过程。直接表访问速度更快,但SP(通常)更加可靠。

答案 2 :(得分:0)

我怀疑你在这里使用ado.net。

如果你这样做,你必须使用SqlCommandBuilder来自动创建insert,update和delete语句。 SqlCommandBuilder检查使用从单个表中选择的单个查询设置的SqlDataAdapter。查询甚至可以是select *

答案 3 :(得分:-1)

这是其中一个没有真正答案的问题。

这取决于你当时想要达到的目的。

我通常会使用存储过程,因为我可以编写更少的代码行,而且我可以在不重建或重新部署任何内容的情况下调整存储过程。如果我需要添加新字段,那么显然需要额外的代码。

如果速度成为一个问题,我可以探索更复杂的解决方案。

我喜欢Brendan使用XML的建议,但我认为我们可能只是为了避免创建太多参数而做了很多工作。我可以看到这将是一个非常好的方法来处理我们达到极限之王的情况。