【发布时间】:2013-05-22 14:05:07
【问题描述】:
这段代码运行得很好,今天我尝试执行它,现在我遇到了这个异常:
我有这个 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 它只是一个简单的表,我在 VS 中使用 SQL Express。它有 3 个列,以 nvarchar(50) 作为其数据类型。而且它不允许空值。
我已尝试通过将 db 中的 nvarchar(50) 数据类型更改为 nvarchar(MAX) 来解决此错误。但这并没有什么不同。
另外,我尝试这样写我的查询:
cmd.CommandText = ("SELECT [Email_id] FROM [logintable] WHERE Email_id like @a AND Password like @b ");
但是,它没有解决或没有任何区别。请帮忙?提前致谢。
【问题讨论】:
-
logintable的架构是什么?它有任何TEXT列吗?你没有打开你的连接,你的参数名称是错误的。 -
听起来您没有查看正确的字段或正在连接到具有
TEXT类型的 db 字段的不同数据库。你确定它们是 varchar 吗? -
它只是一个简单的表,我在 VS 中使用 SQL express。它有 3 个列,以 nvarchar(50) 作为其数据类型。它不允许空值。
-
安全问题总是相关的。