OleDbException 未处理 C# 以访问数据库
Posted
技术标签:
【中文标题】OleDbException 未处理 C# 以访问数据库【英文标题】:OleDbException was unhandled C# to access database 【发布时间】:2013-05-31 02:50:53 【问题描述】:我正在使用带有一个名为 Contact 的表的 Access 数据库。该表包含这些字段 ContactID、FirstName、LastName、SpouseName、电话、电子邮件、WeddingDate、StreetAddress、Suburb、City、PostCode、Country 和 Comments。 ContactID 是自动编号,PK 和WeddingDate 是日期/时间。其余的都是文本字段。
我有一个简单的表单,上面有 4 个文本框,分别用于名字、姓氏、电话和电子邮件,并带有保存按钮。这是我的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace project1
public partial class DataSource : Form
OleDbConnection connection=new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Wills\Projects\Windows\project1\project1\project1.accdb");
public DataSource()
InitializeComponent();
private void DataSource_Load(object sender, EventArgs e)
connection.Open();
private void btnSave_Click(object sender, EventArgs e)
string vsql = string.Format("INSERT INTO Contact values(@FirstName, @LastName, @Phone, @Email)", txtFirstName.Text, txtLastName.Text, txtPhone.Text, txtEmail.Text);
OleDbCommand vcom = new OleDbCommand(vsql, connection);
vcom.ExecuteNonQuery();
MessageBox.Show("Data store successfully");
vcom.Dispose();
private void btnExit_Click(object sender, EventArgs e)
connection.Close();
this.Close();
我在行 vcom.ExecuteNonQuery(); 上收到错误消息说“未处理 OleDbException 没有为一个或多个必需参数提供值。”
我试图更改插入语句,但没有运气,并且查看论坛上的其他示例,我无法获得任何更改以与我的解决方案一起使用。任何想法或帮助将不胜感激。
【问题讨论】:
【参考方案1】:我已经从您的代码中尝试了这一行。
string vsql = string.Format(
"INSERT INTO Contact values(@FirstName, @LastName, @Phone, @Email)",
txtFirstName.Text, txtLastName.Text, txtPhone.Text, txtEmail.Text);
结果是INSERT INTO Contact values(@FirstName, @LastName, @Phone, @Email)
。
我想你正在寻找这个。
string vsql = string.Format(
"INSERT INTO Contact values('0', '1', '2', '3')",
txtFirstName.Text, txtLastName.Text, txtPhone.Text, txtEmail.Text);
此外,如果您尝试插入特定列,则需要使用不同的插入代码。试试这个。
string vsql = string.Format(
"INSERT INTO Contact (FirstName, LastName, Phone, Email) " +
"values ('0', '1', '2', '3')",
txtFirstName.Text, txtLastName.Text, txtPhone.Text, txtEmail.Text);
【讨论】:
嗨@Jieqin 不幸的是它仍然给我同样的信息。还有什么想法吗?不过感谢您的帮助 能否在OleDbCommand vcom = new OleDbCommand(vsql, connection);
行设置断点?然后指向各自的_____.Text
并查看它们的值?此外,请检查您的数据库结构/设计,以确认您在该表中有正好 4 列。
我已经这样做了,他们都有我在表单中显示的文本显示为值
我的表中没有 4 列。请参阅我列出表格和所有列的问题顶部
啊,这就是问题所在。如果您只想插入特定列,则必须使用不同的插入代码。我会更新答案。以上是关于OleDbException 未处理 C# 以访问数据库的主要内容,如果未能解决你的问题,请参考以下文章
System.Data.OleDb.OleDbException 未处理:不是有效路径
OleDbException 未处理:查询表达式中的语法错误(缺少运算符)
System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常附加信息:无法识别的数据库格式