繁体   English   中英

无法在string.Format()中传递null值

[英]Unable to pass null value in string.Format()

我有一个ComboBox名称作为cmbCity ,其dataSource为DisplayMember “CityName”(字符串类型)和ValueMember “ValueID”(数字类型)。

现在更新dataTable我有查询

string query = string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
                             "StringValue", 
                             !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value);`. 

它的工作正常,如果用户选择值形式cmbCity ,我通过cmbCity.SelectedValue获取值,如果用户不选择任何值,然后我试图在数据库中为该字段传递空值但是在格式化字符串后,我得到的值就像

Update TableName Set StringTypeColmName = 'StringValue' , NumberTypeColmName = " 

在此输出字符串中,null值不存在,最后在执行查询时Syntax error in UPDATE statement.出现异常Syntax error in UPDATE statement. 任何帮助如何在输出查询中添加空值。 我正在使用MS-Accesss数据库和VS2010。

你应该(不,不,刮, 绝对 )不使用字符串格式来构建参数化的SQL查询。 相反,使用适当的类,例如:

using (var cmd = new OleDbCommand("Update TableName Set StringTypeColmName = ?, NumberTypeColmName = ?", connection))
{
    cmd.Parameters.AddWithValue("string", "StringValue");
    cmd.Parameters.AddWithValue("num", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value);

    cmd.ExecuteNonQuery();
}

由于这使用数据库驱动程序来处理参数的替换,这实际上是安全的,即使值上的ToString()会导致空字符串。

这应该工作,如果值不存在,你应该传递“null”字符串:

string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
"StringValue", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue.ToString() : "null");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM