0

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

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[]' 

我不知道我现在需要做什么..请帮忙/

4

3 回答 3

2

错误一:

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

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

错误 2 和 3

看来您的方法SqlHelper.ExecuteDataset将数组作为 SqlParameters 的输入,目前您将其作为 a 传递List,只需.ToArray()在末尾添加即可。

ds = SqlHelper.ExecuteDataset(
                             GlobalSettings.DbDSN, 
                             CommandType.Text, 
                             sql.ToString(), 
                             parameters.ToArray()); //right here
于 2013-07-26T12:41:06.677 回答
1

换行

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

类似于

parameters.Add( new SqlParameter("@Category", paraCategory));
于 2013-07-26T12:41:54.490 回答
1

AddWithValue是一种方法SqlParameterCollection。难怪编译器抱怨在 List<SqlParameter>.

话虽如此,请注意,使用开箱即用AddWithValue是一种巨大的反模式。它会导致 SQL Server 引擎出现非常严重的性能问题。有关详细信息,请参阅数据访问代码如何影响数据库性能。为了记录,使用new SqlParameter("@name", value)遇到完全相同的问题。阅读文章。

于 2013-07-26T12:43:25.363 回答