使用SqlParameter作为类型创建列表时出错

时间:2013-07-26 12:38:47

标签: c# asp.net

要构建动态查询,我正在编写一些像这样的代码

StringBuilder sql = new StringBuilder();
   sql.Append("SELECT ... all your columns ... FROM yourTable");
   List<SqlParameter> parameters = new List<SqlParameter>(); 
   if (!string.IsNullOrEmpty(paraCategory))
         {
        sql.Append("[Category]=@Category,");
         parameters.AddWithvalue("@Category", paraCategory);
         }
   sql.Length -= 1;
   sql.Append("ORDER BY CreatedDate");
   ds = SqlHelper.ExecuteDataset(GlobalSettings.DbDSN, CommandType.Text, sql.ToString(), parameters);

现在它会抛出这样的错误

Error   1   'System.Collections.Generic.List<System.Data.SqlClient.SqlParameter>' does not contain a definition for 'AddWithvalue' and no extension method 'AddWithvalue' accepting a first argument of type 'System.Collections.Generic.List<System.Data.SqlClient.SqlParameter>' could be found (are you missing a using directive or an assembly reference?)
Error   2   The best overloaded method match for 'Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteDataset(string, System.Data.CommandType, string, params System.Data.SqlClient.SqlParameter[])' has some invalid arguments   
Error   3   Argument 4: cannot convert from 'System.Collections.Generic.List<System.Data.SqlClient.SqlParameter>' to 'System.Data.SqlClient.SqlParameter[]' 

我不确定我现在需要做什么..请伸出援助之手/

3 个答案:

答案 0 :(得分:2)

错误1:

您需要在列表中添加参数,如:

parameters.Add(new SqlParameter("@Category", paraCategory));

错误2和3

您的方法SqlHelper.ExecuteDataset似乎将数组作为SqlParameters的输入,目前您将其作为List传递,最后只添加.ToArray()

ds = SqlHelper.ExecuteDataset(
                             GlobalSettings.DbDSN, 
                             CommandType.Text, 
                             sql.ToString(), 
                             parameters.ToArray()); //right here

答案 1 :(得分:1)

更改行

parameters.AddWithvalue("@Category", paraCategory);

类似

parameters.Add( new SqlParameter("@Category", paraCategory));

答案 2 :(得分:1)

AddWithValueSqlParameterCollection的一种方法。难怪编译器抱怨在List<SqlParameter>上使用它。

话虽如此,请注意使用开箱即用的AddWithValue是一个巨大的反模式。它会导致SQL Server引擎中出现非常严重的性能问题。有关详细信息,请参阅How Data Access Code Affects Database Performance。对于记录,使用new SqlParameter("@name", value)会遇到完全相同的问题。阅读文章。