如果sql参数为null,则将其转换为DBNULL值

问题描述 投票:0回答:1

我有一个查询,更新我的数据库中的某个表,我在其中为其分配一个参数,后者取值textbox.text如果值不为null它工作得很好,如果是,我得到这个错误消息“将字符串转换为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;
c# sql-server exception-handling
1个回答
0
投票

你可以试试

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

如果它没有投射输入字符串,number将是0;

© www.soinside.com 2019 - 2024. All rights reserved.