首页 > 解决方案 > UPDATE 时的 NULL 条目

问题描述

我正在尝试使用 SQL Server 2017 和 Visual Studio C# 2019 创建登录名,但它只会引发异常

System.Data.SqlClient.SqlException:无法将值 NULL 插入列“pass”、表“master.dbo.user”;该列不允许空值。更新失败。

密码已加密,因此我将其解密并放置在“通过”列下,而不是使用 AS

CREATE TABLE user 
(
    userID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    uname VARCHAR(255) NOT NULL,
    pass VARCHAR(255) NOT NULL
);

INSERT INTO user(uname, pass)
VALUES
('admin', ENCRYPTBYPASSPHRASE('************', 'admin'));

C#代码:

private void btLogin_Click(object sender, EventArgs e)
{
        dbase db = new dbase();

        String user = tbUser.Text;
        //String pass = tbPass.Text;
        SqlCommand update =
            new SqlCommand("UPDATE user SET pass = CONVERT(VARCHAR(255), DECRYPTBYPASSPHRASE('************', pass)) WHERE uname = 'admin'", db.GetConnection());

        db.openConn();
        update.ExecuteNonQuery();
        db.closeConn();

        DataTable table = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter();

        SqlCommand sqlcmd = 
            new SqlCommand("SELECT * FROM user WHERE uName = '" + user + "'", db.GetConnection());

        sqlcmd.Parameters.Add("@user", SqlDbType.VarChar).Value = user;
        //sqlcmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = pass;

        adp.SelectCommand = sqlcmd;
        adp.Fill(table);

        /* check if user exists or not */
        if (table.Rows.Count > 0)
        {
            MessageBox.Show("Hello");
        }
        else
        {
            MessageBox.Show("Incorrect Username/Password.");
        }
    }
}

标签: c#sql-servervisual-studio

解决方案


推荐阅读