2013-03-11 71 views
0

我正在處理我的第一個數據庫程序,並且無法在Access數據庫內更新數據。這是Winform上'添加標準'按鈕的代碼。將數據插入到oleDb表中

Dim TaxConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ConfigurationManager.AppSettings("Database") 
    Dim dbConnection As OleDbConnection = New OleDbConnection(TaxConnStr) 
    Dim dt As New DataTable 
    Dim da As New OleDbDataAdapter 

    Try 
     dbConnection.Open() 

     Dim cmd As New OleDbCommand 
     cmd.CommandText = "INSERT INTO UserCriteria (UserName, State, County, Type, Amount, Rank) VALUES (@UserName, @State, @County, @Type, @Amount, @Rank)" 
     Me.DataGridView1.DataSource = dt 
     cmd.ExecuteNonQuery() 

     dt.Columns.Add("UserName") 
     dt.Columns.Add("State") 
     dt.Columns.Add("County") 
     dt.Columns.Add("Type") 
     dt.Columns.Add("Amount") 
     dt.Columns.Add("Rank") 
     dt.Rows.Add(New String() { 
              boxAssignTo.Text, _ 
              boxState.Text, _ 
              boxCounty.Text, _ 
              boxAmount.Text, _ 
              boxType.Text, _ 
              boxRank.Text}) 





    Catch ex As Exception 
    Finally 
     dbConnection.Close() 
    End Try 

我知道我錯過了什麼或做錯了,所以我要求你上師的指導。

回答

1

代碼中的某些內容非常錯誤。

嘗試用這種

Dim TaxConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ 
          ConfigurationManager.AppSettings("Database") 
Using dbConnection = New OleDbConnection(TaxConnStr) 
    Dim dt As New DataTable 
    Dim da As New OleDbDataAdapter 
    Try 
     dbConnection.Open() 
     Dim cmd As New OleDbCommand 
     cmd.CommandText = "INSERT INTO UserCriteria (UserName, State, County, " & _ 
          "Type, Amount, Rank) VALUES " & _ 
          "(@UserName, @State, @County, @Type, @Amount, @Rank)" 
     cmd.Parameters.AddWithValue("@UserName", boxAssignTo.Text) 
     cmd.Parameters.AddWithValue("@State", boxState.Text) 
     cmd.Parameters.AddWithValue("@County", boxCounty.Text) 
     cmd.Parameters.AddWithValue("@Type", boxType.Text) 
     cmd.Parameters.AddWithValue("@Amount", boxAmount.Text) 
     cmd.Parameters.AddWithValue("@Rank", boxRank.Text) 
     cmd.ExecuteNonQuery() 
    Catch ex As Exception 
    Finally 
     dbConnection.Close() 
    End Try 
End Using 

正如你可以看到添加一條記錄您使用的OleDbCommand的命令文本數據庫表中,並設置其參數,預計將在數據庫表中的值。
還有你的列的數據類型的問題。從你的例子中不可能推斷數據類型,但可能類型,排名和金額是數字列,所以你需要將文本框的值轉換爲適當的數字(Convert.ToInt32(textbox.text))

0

看起來你在那裏結合了兩個概念/對象。您可以使用OleDbCommand插入記錄:

Dim cmd As New OleDbCommand 
cmd.CommandText = "INSERT INTO UserCriteria (UserName, State, County, Type, Amount, Rank) VALUES (@UserName, @State, @County, @Type, @Amount, @Rank)" 
cmd.Parameters.Add(new OleDbParameter("@UserName", DbType.String)) 
cmd.Parameters.Add(new OleDbParameter("@State", DbType.String)) 
cmd.Parameters.Add(new OleDbParameter("@County", DbType.String)) 
cmd.Parameters.Add(new OleDbParameter("@Type", DbType.String))  ' DbType depends on column type in database 
cmd.Parameters.Add(new OleDbParameter("@Amount", DbType.Integer)) ' DbType depends on column type in database 
cmd.Parameters.Add(new OleDbParameter("@Rank", DbType.Integer))  ' DbType depends on column type in database 

cmd.Prepare(); 

cmd.Parameters("@UserName").Value = boxAssignTo.Text 
cmd.Parameters("@State").Value = boxState.Text 
cmd.Parameters("@County").Value = boxCounty.Text 
cmd.Parameters("@Type").Value = boxType.Text 
cmd.Parameters("@Amount").Value = boxAmount.Text 
cmd.Parameters("@Rank").Value = boxRank.Text 

cmd.ExecuteNonQuery()