ALZ*_*ALZ 7 .net c# sql ado.net sql-server-2000
我必须更新一个包含超过270个更新字段的大表.
我是.NET的新手,需要建议在这种情况下使用什么更好:SqlCommand,某种内存映射表或DataSet,或者它可能存在某种使用来自DB的元数据的自动生成的对象?请帮忙.
原因:我有一个旧的大型Delphi7应用程序,其中一部分负责监听socket上的一些数据包,这些数据包被编组到大型结构中,最后一步存储在DB中.现在我将这部分移植到新的C#服务中,至少实际上我必须保留相同的逻辑.问题是结构是BIG(超过220个字段),存储它的表有近300个字段.从我的220个字段的结构中扣除/计算其他~50个字段,所有都应该在DB中更新.实际的Delphi代码是丑陋的蚂蚁它像桌子一样在几年内增长,如下所示:
'UPDATE TABLE_NAME ' +
' MSG_TYPE = ' + IntToStr(integer(RecvSruct.MSG_TYPE)) + ' ' +
' ,SomeFLOATfield = ' + FloatToStr(RecvSruct.SomeFLOATfield) + ' ' +
... //and other over 270 fileds here
'WHERE ID = ' + IntToStr(obj.ID)
Run Code Online (Sandbox Code Playgroud)
没有任何动态SQL等.其实我不能改变数据库结构..所以我必须只在代码中播放,我不确定是否有必要翻译代码.表用于某些报告和统计信息.一些计算/扣除的字段必须处理源代码中的一些常量.
使用dev-tools:MS SQL Server 2000,C#.net2.0,VS2008
最简单的解决方案适用于此,因为 ole db 的工作方式是使用字符串。因此,要传递 270、500、1000 个参数,我所做的就是传递一个字符串,包含 270 个参数的字符串可能远低于 2kb...在现代计算中...传递 1...并不有性能损失。这里有一个 xml 解决方案,但这只是苹果和橘子,您仍然传递字符串,但是需要额外的代码来处理 xml。所以......你的架构应该是这样的:
SQL Server 上具有 270 个输入参数的存储过程:
Create Procedure sp_Example1
(@param1 [type], @param2 [type], @param3 [type], etc...)
AS
BEGIN
[SQL statements]
END
Run Code Online (Sandbox Code Playgroud)具有 270 个参数的命令对象:
SqlCommand cmd = new SqlCommand("sp_Example1", [sqlconnectionstring]);
cmd.Parameters.Add(New SqlParameter("@param1", param1.value));
cmd.Parameters.Add(New SqlParameter("@param2", param2.value));
cmd.Parameters.Add(New SqlParameter("@param3", param3.value));
Run Code Online (Sandbox Code Playgroud)请记住,您仍在进行相当密集的操作,但您的基准应该是旧应用程序。如果稍微差一点,我也不会担心,因为该框架需要更多的计算开销。
我不知道为什么它不会格式化代码......
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |