2013-05-31 90 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

相關問題