4

「CityName」(文字列型)および「ValueID」(数値型)cmbCityとしてdataSourceを持つComboBox名が1つあります。DisplayMemberValueMember

更新のためdataTableにクエリがあります

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

ユーザーが値フォームcmbCityを選択した場合は正常に機能し、ユーザーが値を選択しない場合に値を取得cmbCity.SelectedValueし、そのフィールドのデータベースにnull値を渡そうとしていますが、文字列をフォーマットした後、次のような値を取得します

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

この出力文字列には null 値が存在せず、最終的にクエリの実行中に例外が発生しSyntax error in UPDATE statement.ました。出力クエリに null 値を追加する方法についてのヘルプ。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();
}

これはデータベース ドライバを使用してパラメータの置換を処理するToString()ため、値に対する a が空の文字列になる場合でも、実際には安全に実行できます。

于 2013-08-07T07:41:29.133 に答える