-1

こんにちは、コードがmysqlコマンドを挿入する必要があるプライベートサブを作成しました....そしてそれは行いますが、最も面白い部分は、データベースからレコードが消えることです。そこにはありますが、debbugを停止して最初からやり直しますデータベースでなぜ?

 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
4

2 に答える 2

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
于 2012-07-30T01:42:57.270 に答える
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) のコピーを含め、ビルド時に出力ディレクトリにコピーする前に、このような問題に遭遇しました。

これは、以前のデバッグ サイクル中に行われた変更が新しくコピーされたデータベースによって上書きされるため、大きな混乱を引き起こします。

于 2012-07-30T01:48:37.620 に答える