2013-03-11 5 views
0

Я работаю над своей первой программой базы данных, и у меня возникают проблемы с обновлением данных внутри базы данных доступа. Вот код кнопки «добавить критерии» на 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

Что-то очень не так в вашем коде.

Try с этим

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 с текстом команды и установить его параметры до значений, ожидаемых в таблице базы данных.
Существует также проблема с типом данных ваших столбцов. Из вашего примера невозможно вывести тип данных, но, вероятно, Type, Rank и Amount являются числовыми столбцами, поэтому вам нужно преобразовать значение текстового поля в соответствующее число (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() 
Смежные вопросы