我正在使用一个名为Contact的Access数据库。该表包含这些字段 ContactID,FirstName,LastName,SpouseName,Phone,Email,WeddingDate,StreetAddress,Suburbor,City,PostCode,Country and Comments。 ContactID是一个自动编号,PK和WeddingDate是日期/时间。所有其余的都是文本字段。
我有一个简单的表单,上面有4个文本框,用于firstName,LastName,Phone和带有保存按钮的电子邮件。这是我的代码
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 :(得分: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);