SqlCommand.ExecuteNonQuery() всегда возвращает 0
Я пытаюсь обработать оператор UPDATE через мой код C#. Я использую следующее...
using (SqlCommand cmd = new SqlCommand(query, sqlConn))
{
cmd.Parameters.AddWithValue("@CUSTOMER", intCustomer);
cmd.Parameters.AddWithValue("@CONDITION", strCondition);
cmd.Parameters.AddWithValue("@BOOK", strBook);
cmd.Parameters.AddWithValue("@PAGE", strPage);
cmd.Parameters.AddWithValue("@ENDPAGE", strEndPage);
System.Diagnostics.Debug.WriteLine("Expanded query: " +
query.ExpandSqlQuery(cmd.Parameters));
int affectedRows = cmd.ExecuteNonQuery();
System.Diagnostics.Debug.WriteLine("Number of rows affected: " + affectedRows);
}
Я пытался сделать это с и без параметров только для отладки и всегда получаю возвращаемое значение 0
по какой-то причине.
Я сделал небольшой метод расширения, который расширяет параметры, чтобы показать мне фактический запрос (без переменных)...
public static string ExpandSqlQuery(this String input, SqlParameterCollection sqlParams)
{
string results = input;
foreach (SqlParameter p in sqlParams)
results = results.Replace(p.ParameterName, p.Value.ToString());
return results;
}
... что я звоню прямо перед выполнением запроса, чтобы увидеть, что будет запущено.
System.Diagnostics.Debug.WriteLine("Expanded query: " +
query.ExpandSqlQuery(cmd.Parameters));
Затем я беру тот же самый запрос, который возвратил 0 затронутых строк в C#, и вручную запускаю его в Microsoft SQL Server Management Studio
чтобы это сказать мне 1
строка была затронута!
Запрос с параметрами...
UPDATE
BookList
SET
Overdue=2
WHERE
Customer=@CUSTOMER
and Condition='@CONDITION'
and Book='@BOOK'
and Page='@PAGE'
and EndPage='@ENDPAGE'
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
Customer=@CUSTOMER
and Condition='@CONDITION'
and Book='@BOOK';
Запрос расширен...
UPDATE
BookList
SET
Overdue=2
WHERE
Customer=85
and Condition='old'
and Book='00103'
and Page='00304'
and EndPage='00304'
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
Customer=85
and Condition='old'
and Book='00103';
Есть идеи, как я могу отладить эту проблему?
1 ответ
Вы не должны ставить кавычки вокруг ваших параметров. Таким образом:
UPDATE
BookList
SET
Overdue=2
WHERE
Customer=@CUSTOMER
and Condition='@CONDITION'
and Book='@BOOK'
and Page='@PAGE'
and EndPage='@ENDPAGE'
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
Customer=@CUSTOMER
and Condition='@CONDITION'
and Book='@BOOK';
вместо этого должно быть:
UPDATE
BookList
SET
Overdue=2
WHERE
Customer=@CUSTOMER
and Condition=@CONDITION
and Book=@BOOK
and Page=@PAGE
and EndPage=@ENDPAGE
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
Customer=@CUSTOMER
and Condition=@CONDITION
and Book=@BOOK;