1

Project フォルダーに SQL SERVER データベース ファイルがあります。Debug フォルダー内の同じファイルのコピー。これら 2 つのファイルを SQL Server に添付します。プロジェクト フォルダ テーブル内のファイルのすべてのフィールドに Null 値が含まれています。しかし、Debug フォルダから添付されたファイルにはデータがあります。Project フォルダー内のファイルを使用して接続文字列を作成しました。実際、どのデータベース ファイルが正しいファイルですか? この問題を解決してみてください。

接続文字列は

Public Conn As SqlConnection

Public Function getConnect() As SqlConnection

    Conn = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\EMP_DB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

    Return Conn

End Function

そして、これは私のコードです..

 Try
            getConnect()
            Dim query As SqlCommand
            Dim strSQL As String
            strSQL = "INSERT INTO EMPLOYEE (EMP_ID,EMP_NAME,EMP_FNAME,EMP_GENDER,EMP_DOB,EMP_CAST,EMP_DEPART,EMP_DESIG,EMP_DOJ,EMP_SALARY,EMP_PF_ESI,EMP_BRANCH,EMP_CONTACT,EMP_ADDRESS)VALUES(@EMP_ID,@EMP_NAME,@EMP_FNAME,@EMP_GENDER,@EMP_DOB,@EMP_CAST,@EMP_DEPART,@EMP_DESIG,@EMP_DOJ,@EMP_SALARY,@EMP_PF_ESI,@EMP_BRANCH,@EMP_CONTACT,@EMP_ADDRESS)"
            query = New SqlCommand(strSQL, Conn)
            query.Parameters.Add(New SqlParameter("@EMP_ID", TXTEMPID.Text))
            query.Parameters.Add(New SqlParameter("@EMP_NAME", TXTNAME.Text))
            query.Parameters.Add(New SqlParameter("@EMP_FNAME", TXTFNAME.Text))
            query.Parameters.Add(New SqlParameter("@EMP_GENDER", gend))
            query.Parameters.Add(New SqlParameter("@EMP_DOB", DTPEMPDOB.Value.Date))
            query.Parameters.Add(New SqlParameter("@EMP_CAST", TXTCASTE.Text))
            query.Parameters.Add(New SqlParameter("@EMP_DEPART", CMBDEPT.Text))
            query.Parameters.Add(New SqlParameter("@EMP_DESIG", CMBDESIG.Text))
            query.Parameters.Add(New SqlParameter("@EMP_DOJ", DTPEMPDOJ.Value.Date))
            query.Parameters.Add(New SqlParameter("@EMP_SALARY", MTXTSAL.Text))
            query.Parameters.Add(New SqlParameter("@EMP_PF_ESI", MTXTPFESI.Text))
            query.Parameters.Add(New SqlParameter("@EMP_BRANCH", TXTBRANCH.Text))
            query.Parameters.Add(New SqlParameter("@EMP_CONTACT", MTXTCONTACT.Text))
            query.Parameters.Add(New SqlParameter("@EMP_ADDRESS", RTXTADDRESS.Text))
            Conn.Open()
            Dim numAffected = query.ExecuteNonQuery()
            'MessageBox.Show(numAffected)
            Conn.Close()
            If numAffected > 0 Then
                Call getConnect()
                MessageBox.Show("Successfully Added", "Add", MessageBoxButtons.OK, MessageBoxIcon.Information)
                BTNCLEAR.PerformClick()
            Else
                MsgBox("No record was inserted")
            End If
        Catch ex As Exception
            MsgBox("ERROR: " + ex.Message, MsgBoxStyle.Information, "Add")
        End Try
    End If

このように接続文字列を変更します...

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\EMP_DB.mdf;Initial Catalog=EMP_DB;Integrated Security=True;Connect Timeout=30;User Instance=False
4

1 に答える 1

1

ユーザー インスタンスは減価償却されており、おそらく何がこの混乱を引き起こしているのでしょう。

SQL Server MVP の Aaron Bertrand を引用するには:

ユーザー インスタンスを使用するということは、SQL Server がプログラムで使用するためにそのデータベース ファイルの特別なコピーを作成していることを意味します。同じ接続文字列を使用する 2 つの異なるプログラムがある場合、それらはデータベースの 2 つのまったく異なるコピーを取得します。人々はプログラムでデータの更新をテストしてから、Management Studio でデータベースの別のコピーに接続し、更新が機能しないと不満を言うため、これは多くの混乱を招きます。これにより、間違った問題のトラブルシューティングを試みる、一連の欠陥のある一連の雁行追跡手順が実行されます。

ソース

彼はまた、同じ投稿でいくつかの代替案をリストしています。

  1. データベースを作成するか、SQL Server の実インスタンスに接続します。接続文字列は、インスタンス名、データベース名、資格情報を指定するだけで済みます。Management Studio、Visual Studio、およびプログラムがすべてデータベースの 1 つのコピーに接続されるため、混乱はありません。

  2. SQL Server 2012 を使用している場合は、ローカル開発に SqlLocalDb を使用します。「SQL Server 2012 Express LocalDB の概要」を参照してください。

  3. SQL Server Compactを使用します。機能と構文が同じではないため、私はこのオプションが最も好きではありません.

于 2013-01-15T10:39:21.980 に答える