这段代码工作正常,今天我尝试执行它,现在我正面临这个例外:
我有这个SQL错误:
异常详细信息:System.Data.SqlClient.SqlException:数据类型 text和nvarchar在等于运算符中不兼容。
我的代码是:
protected Boolean is_valid(string a, string b) {
SqlConnection connection = getConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = ("SELECT [Email_id] FROM [logintable] WHERE [Email_id] = @a AND [Password]=@b ");
cmd.Parameters.Add("a", SqlDbType.NVarChar).Value = a;
cmd.Parameters.Add("b", SqlDbType.NVarChar).Value = b;
object obj = cmd.ExecuteScalar();
connection.Close();
...
}`
我的数据库字段类型为nvarchar(50)
。
logintable
它只是一个简单的表,我正在使用SQL Express与VS.它有3个coloumns,nvarchar(50)作为其数据类型。并且它不允许空值。
我尝试通过将db中的nvarchar(50)
数据类型更改为nvarchar(MAX)
来解决此错误。但它没有什么区别。
另外,我试图像这样编写我的查询:
cmd.CommandText = ("SELECT [Email_id] FROM [logintable] WHERE Email_id like @a AND Password like @b ");
但是,它没有解决或有任何区别。请帮忙?提前谢谢。
答案 0 :(得分:0)
确保您的“a”和“b”输入变量长度不超过4000个字符。超过4000个字符的变量将由ado.net驱动程序自动转换为文本变量。
尝试将代码更改为:
protected Boolean is_valid(string a, string b) {
if (string.IsNullOrEmpty(a) || a.Length > 50) {
throw new ArgumentException("a is invalid");
}
if (string.IsNullOrEmpty(b) || b.Length > 50) {
throw new ArgumentException("b is invalid");
}
// Do Work
}