Текст типов данных и varchar несовместимы с равным оператору в С#
Я пытаюсь получить доступ к данным empname
из employeeTable, но код, который я написал, дает мне следующую ошибку:
Текст типов данных и 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();
}
}
Ответы
Ответ 1
Вы не можете сравнивать текст с varchar, но в качестве ответа любому в будущем с этой проблемой просто преобразуйте текстовый столбец в varchar для запроса.
SELECT * FROM EmployeeTable WHERE CONVERT(VARCHAR, empname) = '" + comboBox1.Text + "' ;";
Всегда используйте параметры
SELECT * FROM EmployeeTable WHERE CONVERT(VARCHAR, empname) = @comboBox";
Ответ 2
Попробуйте использовать VARCHAR (MAX), если размер целевой строки недостаточно велик для представления экземпляра XML.
CONVERT(VARCHAR(MAX), empname)
Ответ 3
xulfi afridi,
Вы можете использовать CAST (https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql#syntax) вместо CONVERT следующим образом:
CAST (выражение AS data_type [(length)]);
Таким образом, для решения будет: Выбрать * из EmployeeTable Where Cast (varchar, empname) = '@combobox'
Ответ 4
Код должен быть:
Select * from EmployeeTable Where Cast(empname as varchar(max)) = @combobox