执行选择查询时出错

时间:2012-06-07 09:36:02

标签: c# sql-server tsql exception-handling ado.net

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

  

数据类型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

的错误

2 个答案:

答案 0 :(得分:4)

也许我错过了什么,但首先是:

  1. 在使用之前打开您的连接
  2. 除此之外,

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

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

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

答案 1 :(得分:2)

如果SupplierName确实是文本字段,请尝试:

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

文字是old and deprecated column type。在这些日子里,它可能包含超过8000个字符,超过varchar。自SQL Server 2005以来,varchar(max)更好地填充了该角色。

这将是一个令人惊讶的供应商,其名称超过8000个字符。

相关问题