向Access数据库添加日期失败

本文关键字:日期 失败 添加 数据库 Access | 更新日期: 2023-09-27 18:07:02

在向Access数据库添加生日数据时遇到了一点麻烦。我试过在没有"生日"的情况下运行代码,然后它就工作了。根据我的研究,'DBDate'也考虑到毫秒,我已经尝试将文本字段的输入保存为DateTime格式,但是唉,这也不起作用。

这是我正在使用的代码。

public partial class Records : System.Web.UI.Page
{
    OleDbConnection con;
    OleDbCommand cmd;
    protected void Page_Load(object sender, EventArgs e)
    {
        // Trace.Warn("2310", "Beginning of life Page_Load");
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString=@"Provider=Microsoft.ACE.OLEDB.12.0;
            Data Source=E:'Dropbox'Temporary'OOD Assignment'Employee Directory'AppData'Employee.accdb";
        String empName;
        String ebirth;
        String job;
        String location;
        String pnumber;
        String email;
        OleDbCommand cmd = new OleDbCommand("INSERT into EmployeeRecords ([ename],[job],[location],[phonenumber],[email],[birth])Values(@empName,@job,@location,@pnumber,@email,@ebirth)");
    cmd.Connection = conn;
        conn.Open();
        if(conn.State == ConnectionState.Open)
        {
            cmd.Parameters.Add("@empName", OleDbType.VarChar).Value = tbEName.Text;
            cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = tbBirthDate.Text;
            cmd.Parameters.Add("@job", OleDbType.VarChar).Value = tbJobTitle.Text;
            cmd.Parameters.Add("@location", OleDbType.VarChar).Value = tbOfficeLocation.Text;
            cmd.Parameters.Add("@pnumber", OleDbType.Numeric).Value = tbPNumber.Text;
            cmd.Parameters.Add("@email", OleDbType.VarChar).Value = tbEmail.Text;
            try
            {
                cmd.ExecuteNonQuery();
                Label1.Text = "Data Added";
                conn.Close();
            }
            catch(OleDbException ex)
            {
                Label1.Text = "Exception" + ex;
                conn.Close();
            }
        } else
        {
            Label1.Text = "Connection Failed!";
        }
    }
}

这是我得到的错误:

ExceptionSystem.Data.OleDb。OleDbException (0x80040E07):数据类型条件表达式不匹配。在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult人力资源)System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMSdbParams Object&executeResult)System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object&executeResult)System.Data.OleDb.OleDbCommand.ExecuteCommand (CommandBehavior行为,Object&executeResult)System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior行为,字符串方法)System.Data.OleDb.OleDbCommand.ExecuteNonQuery ()记录。btnSubmit_Click(对象发送方,EventArgs e) ine: ' Dropbox '临时' ' OOD作业员工目录' Records.aspx.cs:第54行

Employee中"birth"的字段类型。accdb文件是Date/Time.

是否有任何方法将用户输入从文本字段转换为Access可以理解的格式?任何帮助都将非常感激。

向Access数据库添加日期失败

DBDateDateTime在CLR侧的映射

这意味着,您需要先将tbBirthDate.Text解析为DateTime

cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = DateTime.Parse(tbBirthDate.Text);

如果你的文本框值不是CurrentCulture的标准日期和时间格式,你可以用DateTime.ParseExact方法用你的字符串的精确格式来解析它。

也可以使用using语句来自动处理连接和命令,而不是手动调用CloseDispose方法。

顺便说一下,OleDbCommand不支持命名参数。实际上,它支持,但不是只是关心。只关心它们的参数值
OleDbCommand cmd = new OleDbCommand(@"INSERT into EmployeeRecords ([ename],[job],[location],[phonenumber],[email],[birth])
                                      Values(@empName,@job,@location,@pnumber,@email,@ebirth)");
....
cmd.Parameters.Add("@empName", OleDbType.VarChar).Value = tbEName.Text;
cmd.Parameters.Add("@job", OleDbType.VarChar).Value = tbJobTitle.Text;
cmd.Parameters.Add("@location", OleDbType.VarChar).Value = tbOfficeLocation.Text;
cmd.Parameters.Add("@pnumber", OleDbType.Numeric).Value = tbPNumber.Text;
cmd.Parameters.Add("@email", OleDbType.VarChar).Value = tbEmail.Text;
cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = DateTime.Parse(tbBirthDate.Text);

不能将字符串传递给Date/Time。您需要将日期转换为DateTime:

DateTime value = new DateTime(year, month, day);

另一种方法是使用DateTimePicker代替TextBox。请注意,因为从我听到的OleDB不能处理毫秒。