2016-08-16 4 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 Injection을 받기 쉽습니다. 대신 Parameterized Queries