我一直在使用 OleDbConnection 和 OleDbCommand 插入记录而崩溃
Posted
技术标签:
【中文标题】我一直在使用 OleDbConnection 和 OleDbCommand 插入记录而崩溃【英文标题】:I keep crashing with Inserting a record using OleDbConnection and OleDbCommand 【发布时间】:2012-04-26 16:15:26 【问题描述】: OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
cmd = new OleDbCommand(sqlQuery, conn);
cmd.CommandText = "INSERT INTO tickets (ProblemIncidentDate, ProblemIncidentTime, user, StateTagNumber, ProblemType, ProblemDescription, ProblemStatus) VALUES (@ProblemDate,@ProblemTime,@userIDNumber,@StateTag,@ProblemType,@ProblemDescription,@ProblemStatus)";
cmd.Parameters.Add("@ProblemDate", OleDbType.Date).Value = labelProblemDate.Text.Trim();
cmd.Parameters.Add("@ProblemTime", OleDbType.DBTimeStamp).Value = labelProblemTime.Text.Trim();
cmd.Parameters.Add("@userIDNumber", OleDbType.Integer).Value = Convert.ToInt32(userID.ToString());
cmd.Parameters.Add("@StateTag", OleDbType.VarChar).Value = textBoxStateTagNumber.Text.Trim();
cmd.Parameters.Add("@ProblemType", OleDbType.VarChar).Value = comboBoxProblemType.SelectedItem.ToString();
cmd.Parameters.Add("@ProblemDescription", OleDbType.VarChar).Value = textBoxProblemDescription.Text.Trim();
cmd.Parameters.Add("@ProblemStatus", OleDbType.VarChar).Value = "Open";
cmd.ExecuteNonQuery(); //At this line exception is generating
conn.Close();
我的数据库是 Microsoft Access 2007
这里是字段类型
ID AutoNumber
ProblemIncidentDate Date/Time
ProblemIncidentTime Date/Time
user Number
StateTagNumber Text
ProblemType Text
ProblemDescription Memo
ProblemResolution Memo
ProblemStatus Text
我不知道为什么会崩溃
控制台消息显示
System.Data.dll 中发生了“System.Data.OleDb.OleDbException”类型的第一次机会异常
【问题讨论】:
你得到什么错误? 发布错误时会有所帮助。通常错误消息包含有关问题所在的提示。 尝试在[user]
周围加上括号,它可能是关键字。此外,您正在将字符串传递到 Integer 和 DateTime 字段中。
拉尔斯 - 你是对的。将 [] 放在用户周围解决了它
【参考方案1】:
尝试使用正确的数据类型,例如
cmd.Parameters.Add("@ProblemDate", OleDbType.Date).Value = DateTime.Parse(labelProblemDate.Text.Trim());
cmd.Parameters.Add("@userIDNumber", OleDbType.Integer).Value = Convert.Int32(userID.ToString());
【讨论】:
必须是时间跨度。查看msdn.microsoft.com/en-us/library/yy6y35y8.aspx上的列表 即使修复了数据类型,我仍然崩溃。【参考方案2】:转换自我的评论:
尝试在 [user] 周围加上括号,它可能是关键字。此外,您正在将字符串传递到 Integer 和 DateTime 字段中。
【讨论】:
【参考方案3】:我曾与不同的 OleDb 提供者合作,发现有些不喜欢命名参数,而是只使用“?”作为参数的占位符。请注意,参数需要以与插入相同的顺序添加(就像您一样),所以尝试更改为..
insert into YourTable( fld1, fld2, fld3 ) values ( ?, ?, ? )
【讨论】:
以上是关于我一直在使用 OleDbConnection 和 OleDbCommand 插入记录而崩溃的主要内容,如果未能解决你的问题,请参考以下文章
JSON.net 直接从 oledbconnection 序列化
如何使用 C# 和 OleDbConnection 读取 .xlsx 和 .xls 文件?
使用 OLEDBConnection 将新记录插入到带有 Visual Basic 的表中