向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可以理解的格式?任何帮助都将非常感激。
DBDate
与DateTime
在CLR侧的映射
这意味着,您需要先将tbBirthDate.Text
解析为DateTime
。
cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = DateTime.Parse(tbBirthDate.Text);
如果你的文本框值不是CurrentCulture
的标准日期和时间格式,你可以用DateTime.ParseExact
方法用你的字符串的精确格式来解析它。
也可以使用using
语句来自动处理连接和命令,而不是手动调用Close
或Dispose
方法。
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不能处理毫秒。