2

いくつかのサンプルデータをSQLサーバーに挿入しようとしています。

Visual Basic2010Expressを使用しています。

コードは次のとおりです。

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

コードは正しく実行されているようですが、デバッグの実行後にデータベースを調べると、サンプルデータが表示されません。

問題はどこだ?

ありがとう

4

3 に答える 3

6

このサイトで以前に述べたように、ユーザー インスタンス全体と AttachDbFileName=のアプローチには欠陥があります。せいぜい! Visual Studio は.mdfファイルをコピーし、おそらく問題なく動作しますが、最終的に間違った .mdf ファイルINSERTを見ているだけです!

このアプローチに固執したい場合は、myConnection.Close()呼び出しにブレークポイントを設定してみてください。次に.mdf、SQL Server Mgmt Studio Express でファイルを調べてください。データがそこにあることはほぼ確実です。

私の意見では、本当の解決策は

  1. SQL Server Express をインストールします (とにかく、既に完了しています)。

  2. SQL Server Management Studio Express をインストールする

  3. SSMS Expressでデータベースを作成し、論理名を付けます (例: Database_Nuovo)

  4. 論理データベース名(サーバー上で作成したときに指定) を使用して接続し、物理データベース ファイルとユーザー インスタンスをいじらないでください。その場合、接続文字列は次のようになります。

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

    そして、それ以外はすべて以前とまったく同じです...

また、ディレクトリ内のファイルのCopy to Output Directoryプロパティの値を確認してください (Visual Studio ソリューション エクスプローラー内で確認してください)。DATABASE_NUOVO.mdfApp_Data

何が起こる可能性がありますか (多くの場合、起こります):

  • Database_Nuovo.mdfVisual Studio がデバッグのためにアプリを起動すると、アプリが実行されている出力ディレクトリ (自分の.\debug\binディレクトリ)にコピーされます。
  • INSERTその後、このファイルのコピーに対して実行さ.mdf正常に動作します
  • デバッグを停止して、データベース ファイルを再度チェックします。しかし、今回はDatabase_Nuovo.mdfApp_Dataディレクトリ内の を見ています。もちろん、挿入されたデータ別のファイルに挿入されているため、存在しません。
于 2013-01-02T20:46:44.070 に答える
2

Try..CatchSqlExceptions だけでなく、より多くのエラー タイプを処理するようにコードを変更してみてください。このような:

    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 だけではありません。

于 2013-01-02T19:32:55.933 に答える
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
于 2013-01-02T19:47:20.563 に答える