Raj*_*aha 0 c# asp.net oledb positional-parameter
将生日数据添加到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!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
ExceptionSystem.Data.OleDb.OleDbException(0x80040E07):条件表达式中的数据类型不匹配。在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(System.Data.OleDb.OleDbCommand.ExecuteCommandText(Data&Execute。)在System.Data.OleDb.OleDb.OleDbCommand.ExecuteNonQuery()处的System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior行为,String方法)处的OleDb.OleDbCommand.ExecuteCommand(CommandBehavior行为,Object&executeResult)在Records.btnSubmit_Clicks(Object sender,EventArg) e)在e:\ Dropbox \ Temporary \ OOD Assignment \ Employee Directory \ Records.aspx.cs:第54行
Employee.accdb文件中“出生”的字段类型为日期/时间。
有什么方法可以将用户输入的文本字段转换为Access可以理解的格式?任何帮助将非常感激。
DBDateDateTime在CLR一侧映射。
这意味着,你需要分析你的tbBirthDate.Text第一个DateTime。
cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = DateTime.Parse(tbBirthDate.Text);
Run Code Online (Sandbox Code Playgroud)
如果您的文本框值不是标准的日期和时间格式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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |