1

DBに存在するユーザー名を入力しました。名前は姓と名のみです。そのため、ミドル ネームは空であり、DB に として保存されnullます。ユーザーの従業員 ID を取得するために、次のクエリを使用しました。しかし、クエリを実行した後の obj の値はnull. 姓名は配列に格納されます。それらの値を確認しました。それらの値は問題ありません。

オブジェクトが nay 値を取得しない理由を教えてください。

SqlCommand cmm1= new SqlCommand ();
cmm1.CommandText = ("Select empID from empPersonalInfo where empFirstName= '" + arr[0].ToString() + "' and empMiddleName= '" + System.DBNull.Value + "' and empLastName= '" + arr[2].ToString() + "' ");            
cmm1.Connection = conn;
obj = cmm1.ExecuteScalar();
4

5 に答える 5

3

equals '=' を使用して NULL を比較することはできません。代わりに 'IS NULL' を使用してください。

cmm1.CommandText = ("Select empID from empPersonalInfo where empFirstName= '" + 
              arr[0].ToString() + "' and empMiddleName IS NULL and empLastName= '" + 
              arr[2].ToString() + "' ");    

ところで、そのクエリはあまり意味がありません。多分 :

empMiddleName IS NULL OR empMiddleName =  @somevalue

さらに、注意してください: SQL インジェクション攻撃を受けやすい可能性があります。ユーザー入力値を連結するのではなく、パラメーターを使用します。

于 2013-05-09T08:55:30.077 に答える
2

nullフィールドと用途を比較するためempMiddleName IS NULL

SQL インジェクションを防ぐために、パラメータ化されたクエリを使用する必要があります。

于 2013-05-09T08:56:30.863 に答える
1

empMiddleName= '" + System.DBNull.Value + "' は正しくありません。NULL 値の = 演算子はありません。

empMiddleName is null に変更します。

于 2013-05-09T08:56:17.227 に答える
0

以下のように、パラメーターをクエリに渡すために SQLParameter オブジェクトを使用します。

SqlCommand command = 
        new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);

    command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
    obj = command.ExecuteScalar();
于 2013-05-09T08:58:45.260 に答える