4

我有一个组合框名称,cmbCity其数据源为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 = " 

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

4

2 回答 2

8

您可能(不,绝对应该)不使用字符串格式来构建参数化 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();
}

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

于 2013-08-07T07:41:29.133 回答
5

这应该有效,如果值不存在,您应该传递“null”字符串:

string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
"StringValue", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue.ToString() : "null");
于 2013-08-07T07:40:27.147 回答