2013-01-12 67 views
0

剛剛接觸到c#。請協助!嘗試向MS訪問插入值時插入錯誤

嘗試向我的數據庫中的MS訪問中插入值時出現錯誤 錯誤消息是:索引(基於零)必須大於或等於零並小於參數列表的大小。

下面是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.OleDb; 

namespace AzureSecureStore 
{ 
    public partial class Client : Form 
    { 
     OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SB18\Documents\Visual Studio 2010\Projects\AzureSecureStore\AzureSecureStore\AzcureSecureStore Database.accdb"); 
     public Client() 
     { 
      InitializeComponent(); 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 

     private void button5_Click(object sender, EventArgs e) 
     { 

     } 

     private void button4_Click(object sender, EventArgs e) 
     { 

     } 

     private void Client_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'azcureSecureStore_DatabaseDataSet5.Client' table. You can move, or remove it, as needed. 
      this.clientTableAdapter.Fill(this.azcureSecureStore_DatabaseDataSet5.Client); 
      // TODO: This line of code loads data into the 'azcureSecureStore_DatabaseDataSet2.Client' table. You can move, or remove it, as needed. 
      //this.clientTableAdapter.Fill(this.azcureSecureStore_DatabaseDataSet2.Client); 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      string ab = string.Format("insert into Client values({0}, '{1}', '{2}', {3}, {4}, '{5}', {6})", textBox1.Text, textBox2.Text, int.Parse(textBox3.Text), int.Parse(textBox4.Text), textBox9.Text, int.Parse(textBox10.Text)); 
      OleDbCommand vcom = new OleDbCommand(ab, vcon); 
      vcom.ExecuteNonQuery(); 
      MessageBox.Show("Data stored successfully"); 
      vcom.Dispose(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 

回答

0

你應該嘗試像這樣在你的按鈕單擊事件

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;" & _ 

     "Data Source=C:\Database\RAAFeedback.mdb") 

conn.Open(); 

OleDbCommand cmd = new OleDbCommand(); 

cmd.Connection = connection; 

cmd.CommandText = "INSERT INTO Feedback([FirstName],[LastName],[Email],[Priphone],[Secphone],[Comment]) & _ 

VALUES (@FirstName,@LastName,@Priphone,@Secphone,@Comment)"; 

cmd.Parameters.Add("@FirstName", OleDbType.VarChar).value = FirstName; 

cmd.Parameters.Add("@LastName", OleDbType.VarChar).value = LastName; 

cmd.Parameters.Add("@Email", OleDbType.VarChar).value = Email; 

cmd.Parameters.Add("@Priphone", OleDbType.VarChar).value = Priphone; 

cmd.Parameters.Add("@Secphone", OleDbType.VarChar).value = Secphone; 

cmd.Parameters.Add("@Comment", OleDbType.VarChar).value = Comment; 

cmd.ExecuteNonQuery(); 

conn.Close(); 



'Clear the text boxes after a new insert 

     FirstName.Text = "" 

     LastName.Text = "" 

     Email.Text = "" 

     Priphone.Text = "" 

     Secphone.Text = "" 

     Comment.Text = "" 
0

你改變你的連接字符串這樣

OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SB18\Documents\Visual Studio 2010\Projects\AzureSecureStore\AzureSecureStore\AzcureSecureStore Database.accdb; Persist Security Info=False;"); 
+0

嗨,嗯,我編輯了這一行,並解決了以前的錯誤。但我得到另一個錯誤,說「ExecuteNonQuery需要一個開放和可用的連接。該連接的當前狀態是關閉。 – user1971823

+0

OleDbCommand vcom = new OleDbCommand(ab,vcon); vcom.Open(); vcom.ExecuteNonQuery(); – vikas

0

你在這一行中有太多爭論者持有者:

string ab = string.Format("insert into Client values({0}, '{1}', '{2}', {3}, {4}, '{5}', {6})", 
    textBox1.Text, textBox2.Text, int.Parse(textBox3.Text), int.Parse(textBox4.Text), textBox9.Text, int.Parse(textBox10.Text)); 

你有7個佔位符,但有6個參數。嘗試更改爲:

string ab = string.Format("insert into Client values({0}, '{1}', '{2}', {3}, {4}, '{5}')", 
    textBox1.Text, textBox2.Text, int.Parse(textBox3.Text), int.Parse(textBox4.Text), textBox9.Text, int.Parse(textBox10.Text)); 
+0

嗨嗯,我編輯了這一行,之前的錯誤已經解決了,但是我得到另一個錯誤,說「ExecuteNonQuery需要一個開放的可用連接。 「 – user1971823

+0

在使用它之前,您需要在您的連接上調用Open。​​即vcon.Open();在調用vcom.ExecuteNonQuery – thudbutt