2012-07-30 97 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