【问题标题】:SQL Parameters in For Loop?For循环中的SQL参数?
【发布时间】:2015-10-26 14:26:30
【问题描述】:

我开始重构我的代码以在我的 asp.net 应用程序中使用“最佳”实践。

我正在进行的一项重大重构是改变我在应用程序中使用 SQL (ado.net) 的方式。我已经更改了所有查询,在这些查询中,我根据用户输入检索信息,这些查询是通过采用输入参数的存储过程来完成的,以减少应用程序的负载并将数据库项目保持在数据库级别。我还更改了一个插入语句,允许用户对数据库执行以使用参数,而不是直接从字符串列表中获取。

但是,我注意到自己现在总共重复了 23 次我的代码。我的代码正在为某种循环而尖叫,但我想不出该怎么做。我看过 foreach 循环,但它不起作用。

我在下面附上了我的代码。你们中的哪一个可以通过给我正确的循环以供最佳实践和使用它的示例来帮助我(请不要为我编写代码,因为我想理解它),但是告诉我循环是如何工作的.

代码:

com.Parameters.AddWithValue("@H0", list[0]);
com.Parameters.AddWithValue("@H1", list[1]);
com.Parameters.AddWithValue("@H2", list[2]);
com.Parameters.AddWithValue("@H3", list[3]);
com.Parameters.AddWithValue("@H4", list[4]);
com.Parameters.AddWithValue("@H5", list[5]);
com.Parameters.AddWithValue("@H6", list[6]);
com.Parameters.AddWithValue("@H7", list[7]);
com.Parameters.AddWithValue("@H8", list[8]);
com.Parameters.AddWithValue("@H9", list[9]);
com.Parameters.AddWithValue("@H10", list[10]);
com.Parameters.AddWithValue("@H11", list[11]);
com.Parameters.AddWithValue("@H12", list[12]);
com.Parameters.AddWithValue("@H13", list[13]);
com.Parameters.AddWithValue("@H14", list[14]);
com.Parameters.AddWithValue("@H15", list[15]);
com.Parameters.AddWithValue("@H16", list[16]);
com.Parameters.AddWithValue("@H17", list[17]);
com.Parameters.AddWithValue("@H18", list[18]);
com.Parameters.AddWithValue("@H19", list[19]);
com.Parameters.AddWithValue("@H20", list[20]);
com.Parameters.AddWithValue("@H21", list[21]);
com.Parameters.AddWithValue("@H22", list[22]);
com.Parameters.AddWithValue("@H23", list[23]);

【问题讨论】:

标签: c# asp.net sql-server ado.net


【解决方案1】:

我会像这样使用普通的for 循环:

for(int index = 0; index < list.Length; index++)
{
    com.Parameters.AddWithValue("@H" + index.ToString(), list[index]);
}

但是,我建议您do not use AddWithValue,因为它可能会产生意想不到的后果。而是做这样的事情:

com.Parameters.Add("@H" + index.ToString(), SqlDbType.Int).Value = list[index];

【讨论】:

  • 感谢您的回答,它有效。阅读那篇文章后,我还将考虑使用“添加”。虽然,我在某处看到 .Add 与 AddWithValue 相比已过时?
  • 不知道你在哪里看到的,如果你找到链接请分享,因为我很确定它是错误的!
【解决方案2】:

应该这样做,假设 list 是一个 List 而不是一个数组

for(int i = 0 ; i < list.Count ; i++)
{
    com.Parameters.AddWithValue(string.Format("@H{0}",i),list[i]);
}

【讨论】:

  • 感谢您的回答。这就像 DavidG 的回答一样按预期工作。
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多