2012-07-30 129 views
-1

嗨,我創建了一個私人子代,其中的代碼必須插入一個MySQL命令....它的確如此,但最有趣的部分是,該記錄從數據庫中消失 它在那裏,但是我停止了debbug,重新開始它不在那裏,即使在數據庫 爲什麼?空白mysql插入到數據庫

Private Sub gravarAtleta() 
    Dim sqlStatement = "insert into atl([nome],[morada],[sexo],[datan],[telf],[desporto]) " 
    sqlStatement &= "VALUES (@nome, @morada, @sexo, @datan, @telf, @desporto)" 

    Using xConn As New SqlConnection(myConnectionString) 
     Try 
      Dim xComm As New SqlCommand(sqlStatement, xConn) 
      With xComm 
       .CommandType = CommandType.Text 
       .Parameters.AddWithValue("@nome", txtNome.Text) 
       .Parameters.AddWithValue("@morada", txtMorada.Text) 
       .Parameters.AddWithValue("@sexo", ComboSexo.Text) 
       .Parameters.AddWithValue("@datan", CType(txtDataN.Text, DateTime).ToString("yyyy-MM-dd")) 
       .Parameters.AddWithValue("@telf", txtTelemovel.Text) 
       .Parameters.AddWithValue("@desporto", ComboBox1.Text) 
      End With 

      xConn.Open() 
      xComm.ExecuteNonQuery() 
      xComm.Dispose() 
      Label1.Content = "O atleta " + txtNome.Text + " foi registado!!!" 
     Catch ex As SqlException 
      MsgBox(ex.Message) 
      Label1.Content = "Falhou a ligação a base de dados!!!" 
     End Try 
    End Using 
End Sub 
+0

Leva如果你必須插入一個mysql命令爲什麼SQL Server連接? – 2012-07-30 09:17:36

回答

1

伊夫修改代碼看看它是否工作

Private Sub gravarAtleta() 

     Dim sqlStatement = "INSERT INTO atl([nome],[morada],[sexo],[datan],[telf],[desporto]) " 
     sqlStatement &= "VALUES (@nome, @morada, @sexo, @datan, @telf, @desporto)" 

     Using xConn As New SqlConnection(myConnectionString) 
      Using xComm As New SqlCommand(sqlStatement, xConn) 
       With xComm 
        .CommandType = CommandType.Text 
        .Parameters.AddWithValue("@nome", txtNome.Text) 
        .Parameters.AddWithValue("@morada", txtMorada.Text) 
        .Parameters.AddWithValue("@sexo", ComboSexo.Text) 
        .Parameters.AddWithValue("@datan", CType(txtDataN.Text, DateTime).ToString("yyyy-MM-dd")) 
        .Parameters.AddWithValue("@telf", txtTelemovel.Text) 
        .Parameters.AddWithValue("@desporto", ComboBox1.Text) 
       End With 
       Try 
        xConn.Open 
        xComm.ExecuteNonQuery 
        Label1.Content = "O atleta " + txtNome.Text + " foi registado!!!" 
       Catch ex As SqlException 
        Msgbox (ex.Message) 
        Label1.Content = "Falhou a ligação a base de dados!!!" 
       Finally 
        xConn.Close 
       End Try 
      End Using 
     End Using 
End Sub 
+0

nop try語句錯了cath必須在語句裏面 – 2012-07-30 01:50:49

+0

不好意思,Prince,如果你有Option Explicit On,甚至不會編譯,因爲xcomm dispose命令不能「看見」xcomm對象(具體來說,你會得到xComm 「 – 2012-07-30 01:51:14

0

首先,你的命令生成應該用using語句完成;這樣,即使數據庫生成和異常,您也不必擁有dispose語句並丟棄該對象。例如:

Using xComm As New SqlCommand(sqlStatement, xConn) 
     With xComm 
      .CommandType = CommandType.Text 
      .Parameters.AddWithValue("@nome", txtNome.Text) 
      .Parameters.AddWithValue("@morada", txtMorada.Text) 
      .Parameters.AddWithValue("@sexo", ComboSexo.Text) 
      .Parameters.AddWithValue("@datan", CType(txtDataN.Text, DateTime).ToString("yyyy-MM-dd")) 
      .Parameters.AddWithValue("@telf", txtTelemovel.Text) 
      .Parameters.AddWithValue("@desporto", ComboBox1.Text) 

      xConn.Open() 

      .ExecuteNonQuery() 
     End With 
    End Using   

其次,您是否可能在您的應用程序的部署中包含數據庫?我甚至不確定這是否可以使用MySQL,但是在我們將解決方案中的數據庫副本(SQLCE,Access)包含在內容之前,我們遇到了類似這樣的問題,並將它複製到構建的輸出目錄中。

這會引起很大的混淆,因爲在以前的調試周期中所做的更改將被新複製的數據庫覆蓋。

+0

所以這意味着te插入命令工作的問題是釋放=,意味着每次我運行項目時,所有來自調試文件夾的文件都將被一個新的從解決方案目錄複製? – 2012-07-30 01:57:24