2015-07-09 3 views
0

Я хочу добавить данные в таблицу в vb.net. Использование Access, oledb и oledbcmmand. Свойства всех столбцов в таблице - это короткий текст. Я пробую этот код, но я не могу вставить данные. Я, кажется, понимаю, что я ошибаюсь. Пожалуйста, укажите неправильную деталь.vb.net oledb Вставить данные в таблицу

Dim HCSDB As New OleDbConnection 
    HCSDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\HCS\HCSDB.mdb") 
    'Dim sQuery As String 
    Dim oleCmd As New OleDbCommand 
    Dim OleTran As OleDbTransaction 

    Try 
     HCSDB.Open() 
    Catch ex As Exception 
     MsgBox("Open err", MsgBoxStyle.OkOnly) 
     Exit Sub 
    End Try 

    Try 
     oleCmd.CommandText = "INSERT INTO InfoManage (SchoolName, BeforeCheck, SendName, SendNum, RecvName, RecvNum, SendTime, SendMsg, UserPass) VALUES (@SchoolName, @BeforeCheck, @SendName, @RecvName, @RecvNum, @SendTime, @SMSCheck, @SendMsg, @UserPass)" 
     oleCmd.Parameters.AddWithValue("@SchoolName", edtSchoolName.Text) 
     oleCmd.Parameters.AddWithValue("@BeforeCheck", cBefore) 
     oleCmd.Parameters.AddWithValue("@SendName", edtSendName.Text) 
     oleCmd.Parameters.AddWithValue("@SendNum", edtSendTel.Text) 
     oleCmd.Parameters.AddWithValue("@RecvName", edtRecvName.Text) 
     oleCmd.Parameters.AddWithValue("@RecvNum", edtRecvTel.Text) 
     oleCmd.Parameters.AddWithValue("@SendTime", sTime) 
     oleCmd.Parameters.AddWithValue("@SendMsg", edtMsg.Text) 
     oleCmd.Parameters.AddWithValue("@UserPass", edtPass.Text) 

     OleTran = HCSDB.BeginTransaction 
     oleCmd.Transaction = OleTran 
     oleCmd.ExecuteNonQuery() 
     OleTran.Commit() 

     MsgBox("saved", MsgBoxStyle.OkOnly) 
     'MsgBox(sQuery) 
    Catch ex As OleDbException 

     MsgBox("err", MsgBoxStyle.OkOnly) 

    End Try 
    HCSDB.Close() 

End If 
+0

Какая ошибка вы получаете? (удалите блок catch catch или покажите ex.ToString() как текст MsgBox и проверьте полученную ошибку) – Damith

+0

http://imgur.com/bKdf8Vq удалить ошибку catch catch block –

ответ

0

Вы не связываете команду с подключением в любом месте. Если бы вы действительно просмотрели сообщение об ошибке, предоставленное исключением, вы бы это заметили. Вам нужно либо установить свойство Connection объекта команды, либо передать как оператор SQL, так и соединение с конструктором.

Кроме того, в чем смысл использования транзакции для одной вставки? Если это для учебных целей, это одно, но вам нужно научиться откатываться от неудачи. В этом случае нечего откатываться, демонстрируя бесполезность транзакции. Точкой транзакции является откат предыдущих успешных шагов, если последующий шаг завершился неудачно. В вашем коде есть только один шаг, поэтому не нужно указывать на транзакцию.

+0

Не знаю, зачем это нужно. , Тем не менее, я скопировал код моего босса. –

+0

Вы должны узнать, какие транзакции для этого есть, поэтому вы знаете, когда и когда они необходимы. Короче говоря, идея состоит в том, чтобы иметь возможность выполнять несколько операций как единое целое, чтобы все они преуспели или не выполнялись. Если вы выполняете только одну операцию, то транзакция не имеет смысла. – jmcilhinney