不兼容的数据类型(text和varchar)

时间:2012-02-12 14:11:53

标签: c# sql-server

示例代码

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在等于运算符中不兼容。

如何克服此错误?

2 个答案:

答案 0 :(得分:2)

您没有向我们提供有关您的架构(或您正在使用的数据库类型)的足够信息,但从根本上说,执行这样的字符串转换是一个坏主意。假设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注入攻击。

答案 1 :(得分:1)

如果app.date是TEXT类型,您可以使用以下方法之一:

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