0

我有一个简单的选择查询,但执行它会给我一个错误:

等于运算符中的数据类型 text 和 varchar 不兼容

这是代码:

string query = String.Format("Select SupplierId from tbl_Supplier where SupplierName ='" + cmbSupplierName.Text +"'");

SqlCommand cmd = new SqlCommand(query, connection);
SqlDataReader sdr = cmd.ExecuteReader();

while (sdr.Read())
{
   MessageBox.Show(sdr["SupplierId"].ToString());
}

的数据类型SupplierNameTEXT数据库中。我不明白为什么它会给我错误varchar

4

2 回答 2

4

也许我错过了一些东西,但第一件事是:

  1. 在使用之前打开您的 Connection

除此之外,

  • 使用参数来避免 SQL 注入
  • 用于using-statement处理/关闭连接和命令(任何实现IDispoable)
  • 如果最大长度小于 8000 个字符,则使用代替,否则您需要使用代替VARCHAR(或将其转换为)TEXTLIKE=VARCHAR

“比较运算符测试两个表达式是否相同。比较运算符可用于除 text、ntext 或 image 数据类型的表达式之外的所有表达式。下表列出了 Transact-SQL 比较运算符。”

http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41/

于 2012-06-07T09:40:23.227 回答
2

如果 SupplierName 真的是一个文本字段,请尝试:

cast(SupplierName as varchar(max)) = '...'

文本是一种旧的且已弃用的列类型。在过去,它可能包含 8000 多个字符,超过varchar. 自 SQL Server 2005 起,该角色由varchar(max).

这将是一个了不起的供应商,尽管它的名称有 8000 多个字符。

于 2012-06-07T09:41:11.507 回答