当前位置: 首页 > 面试题库 >

更新大表(很多列)。C#.NET

湛嘉歆
2023-03-14
问题内容

我必须使用270多个更新字段来更新一个大表。

我对.NET相对较新,需要建议在这种情况下使用什么更好:SqlCommand,某种内存映射表或DataSet,或者它存在某种使用来自数据库的元数据自动生成的对象?请帮忙。

原因:我有一个旧的大型Delphi7应用程序,其中的一部分负责在套接字上侦听一些封包到大型结构并最终存储在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)

没有任何动态SQL等。实际上,我无法更改数据库结构。.因此,我只能使用代码,并且不确定是否正确地翻译代码。该表用于一些报告和统计信息。一些计算/推导的字段必须处理源代码中的某些常量。

使用的开发工具:MS SQL Server 2000,C#.net2.0,VS2008


问题答案:

最简单的解决方案在这里适用,因为ole
db的工作方式是使用字符串。因此,要传递270、500、1000个参数,我要做的就是传递单个字符串,一个包含270个参数的字符串大概在2kb以下…在现代计算中,它沿用了1个…有性能损失。这里有一个xml解决方案,但这只是苹果和橘子,您仍在传递字符串,但是需要额外的代码来处理xml。所以…您的架构应如下所示:

  1. 具有270个输入参数的SQL Server上的存储过程:

     Create Procedure sp_Example1
    

    (@param1 [type], @param2 [type], @param3 [type], etc…)
    AS
    BEGIN
    [SQL statements]
    END

  2. 具有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));

请记住,您仍在进行大量操作,但是您的基准应该是旧的应用程序。如果情况更糟,我将不必担心,因为该框架需要更多的计算开销。

我不知道为什么它不会格式化代码…



 类似资料:
  • 问题内容: 如何获得比Long.MAX_VALUE大的整数? 我希望此方法返回: 问题答案: 该方法无法返回。这是该 点 的。如果它的名字是… false,那 真是 令人困惑。然后应该只调用它,并且合理地使用零个字。只需使用Android的isUserAGoat,您就可以滚动自己的始终返回的函数。 请注意,内存中的字节数固定。 从Oracle: long:long数据类型是64位带符号的二进制补码

  • 问题内容: 我创建了一个SQL查询,该查询更新了一个表列,其中另一列=值 代码: 问题出在。如何使其使用这些ID更新列? 问候。 问题答案: 替换为

  • 问题内容: 我想使用一个case语句更新表中的多个列,但是我找不到如何执行此操作的方法(甚至有可能)。我提出了以下无效的参考查询: 有什么方法可以通过有效的SQL达到预期的结果吗? 问题答案:

  • 问题内容: 我的GUI中有一个由菜单填充的OptionMenu。每次用户运行某个进程时,列表都会更新以反映这一点。有没有一种方法可以基于列表更新OptionMenu?我已经试过按照这个问题,但无济于事。但是,关闭并重新打开该窗口并不会像您期望的那样刷新OptionMenu。相关代码: 问题答案: OptionMenu中的选项未绑定到创建它们的列表。因此,更改列表不会更改OptionMenu,您必须

  • 这看起来应该很简单,但我没有找到任何例子或留档。我有一个看起来像这样的Dynamodb表: 记录1:{姓名、电子邮件、项目[{product}、{item2}、{item3]} 记录2:(姓名、电子邮件、项目[{product}、{item2}、{item3]} 我需要能够更新items元素,即更新记录1中的item1对象。我可以通过硬编码list数组元素使用以下代码来实现这一点,但我不知道如何将

  • 问题内容: 我的用户表有26列以上,这正常吗?当该用户表引起我注意时,数据库已被标准化为第3级。设计26列是否可以,或者在设计数据库时应该使用其他优化技术吗? 更多:对表进行分区是什么意思? 问题答案: 26列没有什么问题,但是如果很少使用它们,那就不一样了。 而不是使用26列,而是使用更少的列,并使用序列化字符串将它们分组。 将字段更改为文本字段,然后在代码中可以对它们进行反序列化并使用它们。如