【问题标题】:Query issue of datetime datatype to date查询日期时间数据类型的问题到日期
【发布时间】:2019-10-31 08:56:59
【问题描述】:

我正在尝试使用 CAST 查询从 access 数据库加载数据,以在 c# 中将数据类型更改为日期。但是当我在文本框中输入参数的日期参数时,它给了我 ierrorinfo.getdescription failed with e_fail .

代码

 connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string start = textBox1.Text;
            string end = textBox2.Text;
            string query = "SELECT dbo_RSWORKORDERCUR.workordercurID,dbo_RSWORKORDERCUR.workordercode,CAST(dbo_RSWORKORDERCUR.closeDtime AS DATE) AS [Close Date],CAST(dbo_RSWORKORDERCUR.RequiredbyDtime AS DATE) AS [Required By Date] " +
                "FROM dbo_RSWORKORDERCUR1 " +
                "WHERE (((CAST(dbo_RSWORKORDERCUR.closeDtime AS DATE))>=@start And (CAST(dbo_RSWORKORDERCUR.closeDtime AS DATE))<=@end));";
            command.Parameters.Add(new OleDbParameter("@start", start));
            command.Parameters.Add(new OleDbParameter("@end", end));
            command.CommandText = query;
            OleDbDataAdapter da = new OleDbDataAdapter(command);
            DataTable dt5 = new DataTable();
            da.Fill(dt5);
            dataGridView1.DataSource = dt5;
            connection.Close();

【问题讨论】:

  • 哪一行导致了错误。尝试调试。还可以尝试指定参数的数据类型,例如:command.Parameters.Add("@start", OleDbType.DBTimeStamp)
  • 应该在dataGridView1.DataSource = dt5;当我使用断点运行时,它会弹出错误。
  • 我认为Ms-Access中没有Cast功能,请改用Cdate

标签: c# sql ms-access


【解决方案1】:

我认为没有理由强制转换这些值。在处理日期和时间时使用 DateTime

        DateTime start = DateTime.Parse(textBox1.Text);
        DateTime end = DateTime.Parse(textBox2.Text);
        string query = "SELECT dbo_RSWORKORDERCUR.workordercurID,dbo_RSWORKORDERCUR.workordercode,dbo_RSWORKORDERCUR.closeDtime, dbo_RSWORKORDERCUR.RequiredbyDtime " +
            "FROM dbo_RSWORKORDERCUR1 " +
            "WHERE dbo_RSWORKORDERCUR.closeDtime >= @start And dbo_RSWORKORDERCUR.closeDtime <= @end;";
        command.Parameters.Add(new OleDbParameter("@start", OleDbType.Date));
        command.Parameters.Add(new OleDbParameter("@end", OleDbType.Date));
        command.Parameters["@start"].Value = start;
        command.Parameters["@end"].Value = end;

【讨论】:

  • 使用这个我收到错误 no value given for 1 or more parameter
  • 这很奇怪。通常,这表示字段或表名拼写错误。
  • 查询在 access 中有效,但在 Visual Studio c# 中输入参数时无效
  • 我无法查看。但它是通用语法,因此请仔细检查您的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多