不兼容的数据类型(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不兼容。

我该如何克服这个错误?

不兼容的数据类型(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类型,您可以选择以下类型之一:

  1. 更改app.date架构,或
  2. 在查询中将date强制转换为varchar:SqlCommand cmd1 = new SqlCommand("select company from app where cast(date as varchar)='"+d.ToString()+"'",connection);