Ank*_*kar 3 c# ms-access winforms
我有一个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);`.
Run Code Online (Sandbox Code Playgroud)
如果用户选择值表单cmbCity,它的工作正常cmbCity.SelectedValue,如果用户不选择任何值,我得到的值然后我试图在数据库中为该字段传递空值但是在格式化字符串后,我得到的值就像
Update TableName Set StringTypeColmName = 'StringValue' , NumberTypeColmName = "
Run Code Online (Sandbox Code Playgroud)
在此输出字符串null值不存在,最后在执行查询时我得到了异常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();
}
Run Code Online (Sandbox Code Playgroud)
由于这使用数据库驱动程序来处理参数的替换,这实际上是安全的,即使ToString()on值会导致空字符串.
这应该有效,如果该值不存在,您应该传递“null”字符串:
string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}",
"StringValue", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue.ToString() : "null");
Run Code Online (Sandbox Code Playgroud)