不兼容的数据类型(text和varchar)
本文关键字:varchar text 数据类型 不兼容 | 更新日期: 2023-09-27 18:24:17
样本代码
DateTime d1 = DateTime.Today;
string t4 = d1.ToString("dd");
string t5 = d1.ToString("MM");
string t6 = d1.ToString("yy");
string d = t4 + "/" + t5 + "/" + t6;
SqlCommand cmd1 = new SqlCommand(
"select company from app where date='"+d.ToString()+"'",connection);
MessageBox.Show(cmd1.CommandText);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
connection.Open();
da.Fill(dt);
button1.Text=dt.Rows[0]["company"].ToString();
connection.Close();
错误:
在等于运算符中,数据类型text和varchar不兼容。
我该如何克服这个错误?
您没有给我们足够的关于您的模式(或您使用的数据库类型)的信息,但从根本上讲,执行这样的字符串转换是个坏主意。假设date
真的是一个DATETIME列或类似的列,只需将其转换为参数化SQL语句,并将该值作为参数。您根本不需要自己执行转换。
DateTime today = DateTime.Today;
using (var command = new SqlCommand("select company from app where date = @p1",
connection))
{
command.Parameters.Add("p1", SqlDbType.DateTime).Value = today;
...
}
您应该对几乎所有值使用参数化SQL。除了转换问题之外,它还避免了SQL注入攻击。
如果app.date是TEXT类型,您可以选择以下类型之一:
- 更改app.date架构,或
- 在查询中将date强制转换为varchar:
SqlCommand cmd1 = new SqlCommand("select company from app where cast(date as varchar)='"+d.ToString()+"'",connection);