2016-08-16 3 views
-1

コードを実行しようとすると問題が発生します。以下のコードでPASSWORD = ''を設定するとすべて正常に動作します。SQLの問題 - NULL値を読み取らない

public int ClearEmployeePasswordById(Employee p) 
{ 
    int result = -1;   
    try 
    {    
     string sql = "UPDATE EMPLOYEE SET " + 
        "PASSWORD=''" + 
        "WHERE Employee_Id=" + p.EmployeeId; 

     Common.logToFile("PosNet.Data.Sybase.cs", "ClearEmployeePasswordById", sql); 
     string r = ExecuteNonQuery(sql); 

     if (!string.IsNullOrEmpty(r)) 
      throw new Exception(r); 

     result = 1; 
     InsertAuditLog(); 
    } 
    catch (Exception ex) 
    { 
     Common.logErrorToFile("PosNet.Data.Sybase.cs", "ClearEmployeePasswordById", ex.Message); 
     //throw ex; 
    } 
    return result; 
} 

しかし、私は、SQLと私の機能でPASSWORD=NULLを変更すると、それは誤り"Reset Password Failed"を示しています。空の文字列を読み込みますが、NULL値は読みません。それはなぜ起こるのですか?

private void btnPasswordReset_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string employeeWithoutQuote = lblEmployeeId.Text.Substring(1, 10); 
     int employeeId = int.Parse(employeeWithoutQuote); 
     Employee employee = MF.BC.DA.GetEmployeeByBarcode(employeeId); 
     if (MF.BC.DA.ClearEmployeePasswordById(employee) != 1) 
     { 
      throw new Exception("Reset Password Failed"); 
     } 
     else 
     { 
      MessageBox.Show("Reset Password Success"); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+1

あなたはデバッグしましたか?また、SPのコードを追加する必要があります –

+0

例外はスローされますか? –

+3

実際に作成したSQLを見ると、 'SET PASWORD = NULLWHERE Employee_Id = ...'と表示されます。 –

答えて

2

これにあなたのSQL strを変更:

string sql = 
    "UPDATE EMPLOYEE SET " + 
    "PASSWORD=NULL " + //NOTE: Added a space 
    "WHERE Employee_Id=" + p.EmployeeId; 

最終的なSQLが所定の位置にスペースなしで間違っています。

string sql = "UPDATE EMPLOYEE SET " + 
      "PASSWORD = NULL " 
      "WHERE Employee_Id=" + p.EmployeeId; 

しかし

+0

私はそれを見て、驚くことはありません。あなたの知識を共有してくれてありがとう –

3

問題は、あなたがPASSWORD=NULLWHERE後にスペースを持っている必要があるということです(おそらくinvalid syntax near 'または類似を述べ、あなたのキャッチで、そのためにログを書かれています) - SQLクエリをすべて作成するために文字列連結を使用しないでください。 SQLインジェクションの影響を受けやすいです。代わりにParameterized Queries

関連する問題