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

问题描述 投票:0回答:5

我正在尝试从employeeTable访问数据

empname
,但我编写的代码给出了以下错误:

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

请提出解决方案

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string Connection = "Data Source=(local);Initial catalog=Test;Integrated Security=true";
    string Query = "SELECT * FROM  EmployeeTable WHERE empname='" + comboBox1.Text + "' ;";

    SqlConnection conn = new SqlConnection(Connection);
    SqlCommand cmd = new SqlCommand(Query, conn);

    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    while (reader.Read())     
    {
        textBoxEmpName.Text = reader["EmpName"].ToString();
    }
}
c# sql t-sql
5个回答
83
投票

您无法将文本与 varchar 进行比较,但作为将来遇到此问题的任何人的答案,只需将文本列转换为 varchar 即可进行查询。

SELECT * FROM  EmployeeTable WHERE CONVERT(VARCHAR, empname) = '" + comboBox1.Text + "' ;";

始终使用参数

SELECT * FROM  EmployeeTable WHERE CONVERT(VARCHAR, empname) = @comboBox";

10
投票

如果目标字符串大小不足以表示 XML 实例,请尝试使用 VARCHAR(MAX)。

CONVERT(VARCHAR(MAX), empname)

2
投票

xulfi afridi,实际上代码应该是:

从 EmployeeTable 中选择 *,其中 Cast(empname as varchar(max)) = @combobox


0
投票

xulfi afridi,

您可以使用 CAST (https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql#syntax) 而不是 CONVERT,如下所示:

CAST (表达式 AS 数据类型[(长度)]);

所以解决方案是: Select*from EmployeeTable 其中 Cast(varchar,empname)='@combobox'


0
投票

您可以使用LIKE关键字代替等号(=)来签名。

© www.soinside.com 2019 - 2024. All rights reserved.