2017-03-02 122 views
-1

這是我的代碼,但我不能將數據插入到MS Access數據庫ASP.Net連接訪問

protected void Submit_Click(object sender, EventArgs e) 
    { 
     string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" 
      + @"Data Source=E:\Parhai\Semester 06\Web\Assignments\i140097_Assignment_02\i140097_a02\i140097_a02\Database\Survey.mdb; Persist Security Info=False"; 
     con = new OleDbConnection(connectionString); 
     con.Open(); 
     using (con) 
     { 
      cmd = new OleDbCommand("INSERT INTO [Person] (Gender, Age, Occupation, Income) VALUES (" + gender.Text + ",'" + age.Text + ",'" + occup.Text + ",'" + income.Text + ")"); 
      cmd.Parameters.AddWithValue("@Gender", gender.Text.ToString()); 
      cmd.Parameters.AddWithValue("@Age", int.Parse(age.Text.ToString())); 
      cmd.Parameters.AddWithValue("@Occupation", occup.Text.ToString()); 
      cmd.Parameters.AddWithValue("@Income", int.Parse(income.Text.ToString())); 
      lbl_show.Text = "Added!!!"; 
     }    
    } 
+0

我認爲錯誤是由於ExecuteNonQuery ... 我應該添加它嗎? –

+0

添加ExecuteNonQuerry給我一個例外... 怎麼辦???? –

+0

根據您發佈的代碼,您從不執行SQL。然後你的評論提到了一個錯誤...你錯過了:cmd.ExecuteNonQuery(); –

回答

1

你定義的參數,但你的命令文本沒有參數佔位符。
像往常一樣,當連接字符串時,很容易出現某些語法錯誤。在你的數據庫中性別看起來是一個字符串字段,所以你需要引用這個值。相反,年齡似乎是一個整數,你不需要報價,等等......

所以第一步是溝渠字符串連接,只是使用下面定義的參數。

cmd = new OleDbCommand(@"INSERT INTO [Person] 
     (Gender, Age, Occupation, Income) VALUES 
     (@Gender, @Age, @Occupation, @Income)", con); 
cmd.Parameters.AddWithValue("@Gender", gender.Text); 
cmd.Parameters.AddWithValue("@Age", int.Parse(age.Text)); 
cmd.Parameters.AddWithValue("@Occupation", occup.Text); 
cmd.Parameters.AddWithValue("@Income", int.Parse(income.Text)); 
cmd.ExecuteNonQuery(); 

另一個問題是當您構建命令時缺少連接。
其本身的命令無法知道它應該在哪個數據庫上執行。您需要將OleDbConnection作爲第二個參數傳遞給OleDbCommand構造函數,或者只需在執行該命令之前設置Connection屬性即可。

當然,該命令需要在一天結束時被執行.....

NB。我也刪除了TextBoxes的Text屬性後的ToString()。文本已經是一個字符串,不需要將其轉換爲字符串。