2014-04-27 33 views
0

我目前正試圖讓我的代碼插入數據到我的數據庫。cmd.Executenonquery()完成但沒有工作

我有以下代碼。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnCommit.Click 
     Dim Con As SqlConnection 
     Dim cmd As New SqlCommand 
     Dim connstring As String 
     connstring = "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Assignment.mdf;Integrated Security=True;Connect Timeout=30" 
     Try 
      Con = New SqlConnection(connstring) 

      cmd = New SqlCommand("Insert into Rota ([Id],[Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday],[Sunday],[UserID]) Values('" & chosen & "','" & mon & "','" & tues & "','" & wed & "','" & thur & "','" & fri & "','" & sat & "','" & sun & "','" & user & "')", Con) 
      cmd.Connection.Open() 
      Dim rows As Integer = cmd.ExecuteNonQuery() 
      MsgBox(rows.ToString() & " rows affected") 
      MsgBox("done") 

      cmd = New SqlCommand("SELECT * from Rota", Con) 
      Dim rows2 As Integer = cmd.ExecuteNonQuery() 
      MsgBox(rows2.ToString() & " rows affected") 
     Catch ex As System.Data.SqlClient.SqlException 
      MsgBox(ex.Message) 
     End Try 
End Sub 

當我的代碼執行時,它回來並告訴我該行已受到影響。但是,如果我查看實際的數據庫。它沒有插入它!

+0

使用try catch塊並讀取異常。 – Mihai

+0

做到了,並且沒有返回錯誤! – JoeM

+0

您爲什麼執行查詢兩次的任何特定原因? –

回答

0

通過下面的代碼你所有的檢查首先是錯誤的:

cmd = New SqlCommand("SELECT * from Rota", Con) 
    Dim rows2 As Integer = cmd.ExecuteNonQuery() 

select報表,你應該使用ExecuteReader()或將其更改爲Select count(*) as cn from ROTA,並通過ExecuteScalar()

第二次運行它,你需要運行Sql Profiler和在你的第一個ExecuteNonQuery()之後立即設置一個斷點,然後看到Profiler以確保你的命令是正確的並且被正確插入,然後不再繼續,在SQL Mamagenent Studio運行SELECT * from Rota with(nolock)並確保數據已插入。然後繼續運行應用程序。然後運行這個查詢SELECT * from Rota。如果在最後一個查詢數據不存在但在第一個查詢中有transaction rollback問題,但是如果有記錄不在它們兩個中都存在插入問題,並且如果記錄存在於兩者中,則查詢應用程序不是運作良好。

+0

感謝您的建議。我沒有SQL分析器,但是我確實改變了它,因此它現在是'ExecuteReader()'。結果仍然是0 – JoeM

+0

@RezaRahmati我認爲問題更多地涉及到前面的插入,而沒有太多的SELECT。 –

+0

@AnthonyHorne是的,我的答案的第二部分是關注這一點。 – RezaRahmati

相關問題