C# 查询字符串数据类型不匹配

C# 查询字符串数据类型不匹配,c#,sql,visual-studio,excel,oledb,C#,Sql,Visual Studio,Excel,Oledb,我正在使用OLEDB使用日期时间选择器查询excel文件,但我在Cirria表达式错误中不断得到数据类型不匹配 日期的excel格式为“6/08/2012 10:00” 您将时间作为字符串传递给查询,因此可以使用ToString()使其工作: MyCommand = new OleDbDataAdapter("select * from [CR$] where ([Req Start Date] >='" + time.ToString("%M/dd/yyyy HH:mm") + "')"

我正在使用OLEDB使用日期时间选择器查询excel文件,但我在Cirria表达式错误中不断得到数据类型不匹配

日期的excel格式为“6/08/2012 10:00”


您将时间作为字符串传递给查询,因此可以使用ToString()使其工作:

MyCommand = new OleDbDataAdapter("select * from [CR$] where ([Req Start Date] >='" + time.ToString("%M/dd/yyyy HH:mm") + "')", MyConnection);
但你真的应该把它作为一个参数。另外,这样更安全

    using (OleDbConnection connection = new OleDbConnection(yourConnectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [CR$] where [Req Start Date] >= ?", connection);
        adapter.SelectCommand.Parameters.Add("@p1", OleDbType.Date);
        adapter.SelectCommand.Parameters["@p1"].Value = time;

        try
        {
            connection.Open();
            adapter.Fill(DtSet);
        }
        catch (Exception ex)
        {
            //handle error
        }
    }

了解更多信息:

创建一个OLEDB命令,并将该值作为参数传入。然后将该命令用作OleDbAdapter构造函数的参数

string queryString = "select * from [CR$] where ([Req Start Date] >= ?)";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.Add("@p1", OleDbType.DateTime).Value = time;
MyCommand = new OleDbDataAdapter(queryString, MyConnection);

我得到一个错误,表示soes not contatin DEFITINO for DateTIme,使用date给出一个错误,表示没有为一个或多个必需参数提供值。我得到一个错误,表示soes not contatin DEFITINO for DateTIme,使用date给出一个错误,表示没有为一个或多个必需参数提供值。我稍微修改了语句。我发现在添加参数的同时添加值存在一些问题。我不能测试这个,所以你可能只想玩一下。
string queryString = "select * from [CR$] where ([Req Start Date] >= ?)";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.Add("@p1", OleDbType.DateTime).Value = time;
MyCommand = new OleDbDataAdapter(queryString, MyConnection);