我有一个简单的选择查询,但执行它会给我一个错误:
数据类型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());
}
数据库中SupplierName
的数据类型为TEXT
。我不明白为什么它给了我varchar
答案 0 :(得分:4)
也许我错过了什么,但首先是:
除此之外,
using-statement
来处置/关闭连接和命令(任何实现IDispoable)
VARCHAR
而不是TEXT
,否则您需要使用LIKE
代替=
(或将其转换为{{} 1}})“比较运算符测试两个表达式是否相同。 比较运算符可用于除表达式之外的所有表达式 text,ntext或image数据类型。下表列出了 Transact-SQL比较运算符。“
答案 1 :(得分:2)
如果SupplierName确实是文本字段,请尝试:
cast(SupplierName as varchar(max)) = '...'
文字是old and deprecated column type。在这些日子里,它可能包含超过8000个字符,超过varchar
。自SQL Server 2005以来,varchar(max)
更好地填充了该角色。
这将是一个令人惊讶的供应商,其名称超过8000个字符。