表架构和类定义

时间:2019-04-25 12:04:31

标签: c# sql-server

运行登录表单以输入值时出现错误,但运行时异常

  

文本 nvarchar 数据类型在等于运算符中不兼容。

我在此处进行一些更改以避免此错误。

我已经尝试过:

usertype(datatype("text" to"varchar(MAX)") and( "varchar(50)" to "text"  and varchar(50) to varchar(MAX)"))

反之亦然,但我仍然一次又一次收到此错误。 代替此查询的任何解决方案,请帮帮我。

class loginDAL
{
    static string myconnstrng = ConfigurationManager.ConnectionStrings["connstrng"].ConnectionString;
    public bool loginCheck(loginBLL l)
    {
        bool isSuccess = true;
        SqlConnection conn = new SqlConnection(myconnstrng);

        try
        {
            string sql = "SELECT *  FROM tbl_users WHERE username=@username AND password=@password AND user_type=@user_type";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@username", l.username);
            cmd.Parameters.AddWithValue("@password", l.password);
            **cmd.Parameters.AddWithValue("@user_type", l.user_type); **

             SqlDataAdapter adapter = new SqlDataAdapter(cmd);

            DataTable dt = new DataTable();
            conn.Open();

            adapter.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                isSuccess = true;
            }
            else
            {
                isSuccess = false;
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            conn.Close();
        }
        return isSuccess;
    }
}

我希望成功打开的登录表单中的输出不会出现运行时异常。

1 个答案:

答案 0 :(得分:1)

如果在与SQL通信时遇到数据类型的此类问题,请使用Add代替AddWithValue,并指定要处理的列的确切类型,并注意传递相应的列.net类型。 This thread可帮助您使用.net识别SQL Server数据类型映射  这是给您的示例:

cmd.Parameters.Add("@username", SqlDbType.NVarChar,50).Value = l.username; // for NVarChar(50)
cmd.Parameters.Add("@password", SqlDbType.VarChar,50).Value = l.password; // for VarChar(50)
cmd.Parameters.Add("@user_type", SqlDbType.Int).Value = = l.user_type; // for integers

请注意:以上指定的方法只是将Add用于不同数据类型的示例,您必须根据特定列的类型选择正确的数据类型,并且您传递的类型也应匹配。