2013-02-20 31 views
0

我试图用sqldataadapter和sqltransaction在多个表中插入记录。我使用下面的代码。但它不起作用。帮我PLZ .......告诉我的问题在此代码使用sqldataadapter和sqltransaction在多个表中插入记录

Dim cn As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=AMHSDB;Integrated Security=True") 
Dim da As New SqlDataAdapter 
Dim ds As New DataSet 
Dim trans As SqlTransaction 
Dim tot As Integer 
Public Sub RecordSave() 
    tot = CInt(TB3.Text.Trim) + CInt(TB4.Text.Trim) + CInt(TB5.Text.Trim) + CInt(TB6.Text.Trim) 
    Dim yr As String 
    yr = Now.Year() 
    Try 
     cn.Open() 
     trans = cn.BeginTransaction() 
     da.InsertCommand.Transaction = trans 
     da.InsertCommand = New SqlCommand("INSERT INTO[FTUT_tbl] (roll_no,s_name,class,session,eng_i,ben,math,stu_wor,gra_tot) VALUES ('" & TB1.Text.Trim & "','" & TB2.Text.Trim & "','Nursery','" & yr & "','" & TB3.Text.Trim & "','" & TB4.Text.Trim & "','" & TB5.Text.Trim & "','" & TB6.Text.Trim & "','" & tot & "')", cn) 
     da.InsertCommand.ExecuteNonQuery() 
     da.Dispose() 
     da.InsertCommand = New SqlCommand("INSERT INTO[FTE_tbl] (roll_no,s_name,class,session) VALUES ('" & TB1.Text.Trim & "','" & TB2.Text.Trim & "','Nursery','" & yr & "')", cn) 
     da.InsertCommand.ExecuteNonQuery() 
     da.Dispose() 
trans.Commit() 
     MsgBox("Rocord Successfully Inserted!") 
    Catch ex As Exception 
     trans.Rollback() 
     MsgBox(ex.Message) 
    Finally 
     cn.Close() 
    End Try 
End Sub 
+1

你得到了什么样的错误? – 2013-02-20 10:04:40

+0

你面临什么错误.. ??请在这一行中解释 – user1102001 2013-02-20 10:05:45

+0

错误(da.InsertCommand.Transaction = trans)。 &错误是“对象引用未设置为对象的实例”@AndreyGordeev – 2013-02-20 10:06:41

回答

1

创建InsertCommand第一,然后分配交易:

da.InsertCommand = New SqlCommand("...") 
da.InsertCommand.Transaction = trans 

而你需要提交您的交易:

da.InsertCommand.Transaction.Commit() 
+0

它不工作! – 2013-02-20 10:19:16

+0

同一行中出现同样的错误? – SysDragon 2013-02-20 10:22:18

0

试试这个,可能是它会帮助你

Dim dsBillMst As DataTable 
Dim TrDtsSvr As SqlTransaction 
Dim cmdReadLocal As New SqlCommand 
Dim ConSvr As New SqlConnection(gblstrDBConnectionStr) 
ConSvr.Open() 
TrDtsSvr = ConSvr.BeginTransaction() 
cmdReadLocal.Transaction = TrDtsSvr 
cmdReadLocal.commandtext="//your insert statement" 
cmdReadLocal.executenonquery() 
adapter = New SqlDataAdapter(cmdReadLocal) 
      dsBillMst = New DataTable 
      adapter.Fill(dsBillMst) 
0

你的问题是你在第一次插入中放置了sql命令,但是你没有在另一次插入中再次打开它。

试试这个.....

cn.Open() 
    trans = cn.BeginTransaction() 
    da.InsertCommand.Transaction = trans 
    da.InsertCommand = New SqlCommand("INSERT INTO[FTUT_tbl] (roll_no,s_name,class,session,eng_i,ben,math,stu_wor,gra_tot) VALUES ('" & TB1.Text.Trim & "','" & TB2.Text.Trim & "','Nursery','" & yr & "','" & TB3.Text.Trim & "','" & TB4.Text.Trim & "','" & TB5.Text.Trim & "','" & TB6.Text.Trim & "','" & tot & "')", cn) 
    da.InsertCommand.ExecuteNonQuery() 
    da.Dispose() 
    cn.Open() 
    da.InsertCommand = New SqlCommand("INSERT INTO[FTE_tbl] (roll_no,s_name,class,session) VALUES ('" & TB1.Text.Trim & "','" & TB2.Text.Trim & "','Nursery','" & yr & "')", cn) 
    da.InsertCommand.ExecuteNonQuery() 
    da.Dispose() 
相关问题