Приведите sqlparameter в значение DBNULL, если оно равно NULL - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть запрос, который обновляет определенную таблицу в моей базе данных, в которой я присваиваю ему параметр, последний принимает значение textbox.text, если значение не равно нулю, он работает просто отлично, если это так, яполучить это сообщение об ошибке «При преобразовании строки в DateTime проанализируйте строку, чтобы взять дату, прежде чем помещать каждую переменную в объект DateTime».

Мой вопрос: какой тип приведения следует использовать, чтобы избежать использованияоператора If?

SqlCommand loadbonus = new SqlCommand()
loadbonus.Connection = conn;
loadbonus.CommandText = "UPDATE Client SET [Restant Bonus]=[Restant Bonus]-(SELECT SUM([Prix Total]) FROM Comptoir WHERE [N° Comptoir]='" + tabcontrol.SelectedIndex + "'),[Total Consommé]=[Total Consommé]+(SELECT SUM([Prix Total]) FROM Comptoir WHERE [N° Comptoir]='" + tabcontrol.SelectedIndex + "') OUTPUT INSERTED.[Restant Bonus] WHERE [Code Client]=@CodeClient";          
loadbonus.Parameters.Add("@CodeClient", SqlDbType.Int).Value = Convert.ToInt32(clientcodecomptoire.Text);

Фактическое сообщение об ошибке:

"При преобразовании строки в DateTime анализируйте строку, чтобы взять дату, прежде чем помещать каждую переменную в объект DateTime" *

Я пробовал следующий кастинг, и он не работал:

loadbonus.Parameters.Add("@CodeClient", SqlDbType.Int).Value = Convert.ToInt32(clientcodecomptoire.Text)??DBNull.Value;

1 Ответ

0 голосов
/ 12 февраля 2019

вы можете попробовать

int number;
bool success = Int32.TryParse(clientcodecomptoire.Text, out number);
loadbonus.Parameters.Add("@CodeClient", SqlDbType.Int).Value = success ? number : DBNull;

, если не удается привести входную строку, number будет 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...