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

エラー 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
于 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 に答える