我正在尝试从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();
}
}
您无法将文本与 varchar 进行比较,但作为将来遇到此问题的任何人的答案,只需将文本列转换为 varchar 即可进行查询。
SELECT * FROM EmployeeTable WHERE CONVERT(VARCHAR, empname) = '" + comboBox1.Text + "' ;";
始终使用参数
SELECT * FROM EmployeeTable WHERE CONVERT(VARCHAR, empname) = @comboBox";
如果目标字符串大小不足以表示 XML 实例,请尝试使用 VARCHAR(MAX)。
CONVERT(VARCHAR(MAX), empname)
xulfi afridi,实际上代码应该是:
从 EmployeeTable 中选择 *,其中 Cast(empname as varchar(max)) = @combobox
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'
您可以使用LIKE关键字代替等号(=)来签名。