1

我在 Project 文件夹中有 SQL SERVER 数据库文件。Debug 文件夹中的相同文件副本。我在 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 正在创建该数据库文件的特殊副本以供您的程序使用。如果您有两个不同的程序使用相同的连接字符串,它们将获得两个完全不同的数据库副本。这会导致很多混乱,因为人们将使用他们的程序测试更新数据,然后在 Management Studio 中连接到他们数据库的不同副本,并抱怨他们的更新不起作用。这使他们经历了一系列有缺陷的野鹅追逐步骤,试图解决错误的问题。

[来源]

他还在同一篇文章中继续列出了一些替代方案:

  1. 创建或将您的数据库附加到 SQL Server 的真实实例。然后,您的连接字符串将只需要指定实例名称、数据库名称和凭据。不会有混淆,因为 Management Studio、Visual Studio 和您的程序都将连接到数据库的单个副本。

  2. 如果您使用的是 SQL Server 2012,请使用 SqlLocalDb 进行本地开发。请参阅:“SQL Server 2012 Express LocalDB 入门”。

  3. 使用SQL Server 紧凑。我最不喜欢这个选项,因为功能和语法不一样 - 所以它不一定会为您提供您最终想要部署的所有功能。

于 2013-01-15T10:39:21.980 回答