2013-01-02 55 views
2

我試圖插入一些示例數據到SQL服務器。插入數據到SQL Server使用VB .NET

我正在使用Visual Basic 2010 Express。

下面的代碼:

Public Sub insert() 

    Dim myconnect As New SqlClient.SqlConnection 
    myconnect.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DATABASE_NUOVO.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 


    Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand() 
    mycommand.Connection = myconnect 
    mycommand.CommandText = "INSERT INTO utenti (nome) VALUES ('mario')" 
    myconnect.Open() 

    Try 
     mycommand.ExecuteNonQuery() 
    Catch ex As System.Data.SqlClient.SqlException 
     MsgBox(ex.Message) 
    End Try 
    myconnect.Close() 
    MsgBox("Success") 

End Sub 

代碼似乎正常運行,但是當我運行調試照顧到數據庫中,我沒有看到樣本數據。

問題在哪裏?

感謝

+1

不要限制你的'Catch'只是SqlExceptions。還有其他類型的異常可以在這裏引發。 – RBarryYoung

+0

我應該如何改變Catch? @RBarryYoung – Bellu

+0

作爲回答發表。 – RBarryYoung

回答

6

正如我上這個網站之前所說的 - 整個用戶實例和AttachDbFileName =方法是有缺陷的 - 在最好的! Visual Studio將複製.mdf文件和最有可能,您的INSERT工作得很好 - 但你只是在最後看錯誤.mdf文件

如果你想堅持這種方法,那麼試着在myConnection.Close()調用上放一個斷點 - 然後用SQL Server Mgmt Studio Express檢查.mdf文件 - 我幾乎可以確定你的數據在那裏。

在我看來真正的解決方案

  1. 安裝SQL Server Express(和你已經做到這一點無論如何)

  2. 安裝SQL Server Management Studio中快速

  3. 創建您的數據庫SSMS Express,給它一個邏輯名稱(例如Database_Nuovo

  4. 使用其邏輯連接到數據庫名稱(在服務器上創建時給出) - 並且不要亂用物理數據庫文件和用戶實例。在這種情況下,您的連接字符串將是這樣的:

    Data Source=.\\SQLEXPRESS;Database=Database_Nuovo;Integrated Security=True 
    

    和其他一切是正是和以前一樣......

另外:檢查一下Copy to Output Directory屬性的值位於App_Data目錄中的DATABASE_NUOVO.mdf文件中(在Visual Studio解決方案資源管理器中查找它)。

可能發生的事情(和做,往往不是):

  • 在Visual Studio中啓動您的應用程序進行調試,應用程序運行在那裏拷貝Database_Nuovo.mdf到輸出目錄(您.\debug\bin目錄)
  • INSERT然後運行鍼對該.mdf文件的副本和工作得很好
  • 你停止調試並再次去檢查數據庫文件 - 但是這一次,你看Database_Nuovo.mdfApp_Data目錄 - >和當然您插入的數據不存在因爲它被插入到不同的文件!
+0

+!:啊,好的。我錯過了.mdf可以被複制*而不是被移動或重命名(並且因此不會引發錯誤)。 – RBarryYoung

+1

謝謝大家。 '錯誤'不是一個真正的錯誤,只是我在錯誤的數據庫中搜索我的數據。我的數據位於\ debug \ bin目錄中。對不起:) – Bellu

2

試着改變你的Try..Catch代碼不僅僅是SQLException的處理更多的錯誤類型。像這樣:

Try 
     mycommand.ExecuteNonQuery() 
    Catch ex As System.Data.SqlClient.SqlException 
     MsgBox(ex.Message, , "Sql Exception") 
    Catch ex As System.Exception 
     MsgBox(ex.Message, , "General Exception") 
    End Try 

SqlExceptions不是唯一可以拋出的異常。

+0

我更改了代碼,但是我沒有收到任何類型的錯誤... @RBarryYoung – Bellu

+0

您是否收到「成功」消息框? – RBarryYoung

0

用它試試..

Dim con As New SqlConnection 
Dim cmd As New SqlCommand 
Try 
con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DATABASE_NUOVO.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" //check your connection string carefully whether it points right directory 
con.Open() 
cmd.Connection = con 
cmd.CommandText = "INSERT INTO table([field1], [field2]) VALUES([Value1], [Value2])" //make sure here your table and column name is exactly like as your database 
cmd.ExecuteNonQuery() 

Catch ex As Exception 
MessageBox.Show("Error while inserting record on table..."); 
Finally 
con.Close() 
End Try 
+0

我試過你的建議,但我的sql語法沒有錯誤。 @ridoy – Bellu

+0

然後這將是你的數據庫文件的問題,你的插入語句不適用於你的數據庫你的連接字符串。嘗試marc_s的過程,然後應用我的代碼。期待它會好的。 – ridoy