运行登录表单以输入值时出现错误,但运行时异常
文本和 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;
}
}
我希望成功打开的登录表单中的输出不会出现运行时异常。
答案 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
用于不同数据类型的示例,您必须根据特定列的类型选择正确的数据类型,并且您传递的类型也应匹配。