2013-05-31 153 views
0

我正在使用一个名为Contact的表的Access数据库。该表格包含这些字段 ContactID,姓氏,姓氏,配偶姓名,电话,电子邮件,婚礼日期,街道地址,郊区,城市,邮政编码,国家和评论。 ContactID是一个自动编号,PK和WeddingDate是日期/时间。其余的都是文本字段。OleDbException未处理C#访问数据库

我有一个简单的表单,上面有4个文本框,用于存储firstName,LastName,Phone和Email。这里是我的代码

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未处理没有给出一个或多个必需的参数值”。

我试图改变插入语句,但没有运气,并在论坛上看着其他例子,我无法获得任何更改以使用我的解决方案。任何想法或帮助将不胜感激。

回答

0

我试过这段代码。

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); 
+0

嗨@Jieqin不幸的是它仍然给我同样的信息。还有什么想法?感谢您的帮助,虽然 – WillNZ

+0

你可以在'OleDbCommand vcom = new OleDbCommand(vsql,connection)'这一行放置一个断点吗?然后指向相应的“_____。Text”并查看它们的值?另外,请检查您的数据库结构/设计,以确认您在该表格中有**完全** 4列。 – Jieqin

+0

我已经这样做了,他们都有我在表格中显示的文字,显示为值 – WillNZ

相关问题