C# SQL问题-不读取空值

C# SQL问题-不读取空值,c#,winforms,sybase-asa,C#,Winforms,Sybase Asa,我在尝试运行代码时遇到了一个问题,当我将密码设置为下面的代码时,一切都运行良好 public int ClearEmployeePasswordById(Employee p) { int result = -1; try { string sql = "UPDATE EMPLOYEE SET " + "PASSWORD=''" +

我在尝试运行代码时遇到了一个问题,当我将密码设置为下面的代码时,一切都运行良好

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
时,它会显示错误
“重置密码失败”
。它只读取空字符串,而不读取空值。为什么会这样

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);
    }
}

将SQL str更改为:

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

如果没有空格,您的最终SQL是错误的。

问题是您需要在
PASSWORD=NULL
WHERE
后面有一个空格(您可能已经在catch中为此写了一个日志,说明“附近的
无效语法或类似内容):


但是-避免使用字符串连接一起创建sql查询。它易受SQL注入的影响。改用

你调试好了吗?此外,您还需要添加SPID的代码引发了什么异常?如果您查看实际创建的SQL,它将读取
SET PASWORD=NULL,其中Employee_Id=…
。密码列/字段是否允许数据库中的空值?通常,您不应该将密码存储为字符串。在大多数情况下,您应该存储一个salt加密散列(如果这是以后提示输入密码的常见情况,并且您需要执行的只是一个相等性检查)。哦,我明白了,这也就不足为奇了。谢谢你分享你的知识
string sql = "UPDATE EMPLOYEE SET " +
             "PASSWORD = NULL "
             "WHERE Employee_Id=" + p.EmployeeId;