【问题标题】:How Would I Add a Date To Microsoft Access?如何将日期添加到 Microsoft Access?
【发布时间】:2021-05-28 14:21:28
【问题描述】:

我在向 Microsoft Access 添加日期/时间时遇到问题,这是我的代码:

private void submit_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText = "insert into DailyLog (EmployeeID,BusNumber,RouteID,DestinationID,ActivityID,Date,MilesDriven,GasInGallons,Comments) values('"+ employee.SelectedValue + "','" + bus.SelectedValue + "','" + route.SelectedValue + "','" + dest.SelectedValue + "','" + activity.SelectedValue + "','" + theDate.Value.ToString("MM/dd/yyyy") + "','" + miles.Value + "','" + gas.Value + "','" + comments.Text + "')";

                command.ExecuteNonQuery();
                MessageBox.Show("Your log has been submitted.");
                connection.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Err: " + ex);
                connection.Close();
            }
        }

它只给我一个“日期”的语法错误。我该怎么办?我已尝试修复属性,将其设为短日期、一般日期等。似乎对我没有任何效果。

确切的错误:

【问题讨论】:

  • 您的数据库 ms-access 中 Date 的数据类型是什么?
  • 使用参数来阻止 SQLi。将Date 包裹在[] 中,这将成为[Date],因为它是插入语句中的保留关键字。此外,如果您使用参数,则不会存在此类问题。还值得一提的是,It is giving me a syntax error,这不是描述性的。
  • 目前我把它作为短日期。虽然它是短日期,但我在我的视觉工作室日期尝试了各种不同的属性,例如短和自定义 (MM/dd/yyyy),同时尝试 ToString("MM/dd/yyyy") 和甚至 ToShortDateString()...
  • 如果是短日期,你不应该使用'(单引号),而是使用哈希#
  • 我会确保在参数中包含日期。至于通过一个简短的日期,你能告诉我一个带有标签而不是单引号的例子吗?

标签: c# winforms ms-access


【解决方案1】:

尝试参数化您的命令。这将解决任何潜在的 SQL 注入问题以及正确格式化 DBMS 的值。

string commandText = "insert into DailyLog (EmployeeID,BusNumber,RouteID,DestinationID,ActivityID,Date,MilesDriven,GasInGallons,Comments) values(@employee, @bus, @route, @dest, @activity, @theDate, @miles, @gas, @comments)";

using (OleDbCommand command = new OleDbCommand(commandText, connection)) {

    // add parameters
    command.Parameters.Add(new OleDbParameter("@employee", OleDbType.Integer));
    command.Parameters.Add(new OleDbParameter("@theDate", OleDbType.DBDate));

    // set parameter valuess
    command.Parameters["@employee"] = employee.SelectedValue;
    command.Parameters["@theDate"] = theDate.Value;

    // execute command
    command.ExecuteNonQuery();
}

更新为移除 AddWithValue。

【讨论】:

  • @Nicholas Hunter 你也可以command.Parameters.Add(new OleDbParameter("@employee", OleDbType.Integer)).Value = employee.SelectedValue;;而不是再次寻找参数来设置它的值。
  • new OleDbParameter("@theDate", OleDbType.DBDate) { Value = theDate.Value }
  • @OlivierJacot-Descombes 哦,剥鱼皮的方法有很多 :)
  • Just imagine if people put as much effort into answering OP's,想象一下如果有些人接受有用的反馈来改进而不是批评建设性的反馈。一切都很好,这是一个建议或另一种选择;这并不是说你错了。
  • 我们的 cmets 旨在帮助您改进答案。我们可以发布一个改进的答案来赢得所有的支持。
猜你喜欢
  • 2010-10-08
  • 1970-01-01
  • 2015-10-31
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多