SQL Server中的数据库连接和数据保存

时间:2013-01-15 08:39:41

标签: database vb.net sql-server-2005

我在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

1 个答案:

答案 0 :(得分:1)

用户实例已弃用,可能导致此混淆。

引用SQL Server MVP Aaron Bertrand:

  

使用用户实例意味着SQL Server正在创建特殊副本   您的程序使用的数据库文件。如果你有两个   使用相同连接字符串的不同程序,它们得到两个   完全不同的数据库副本。这导致了很多   混乱,因为人们将测试用他们的程序更新数据,然后   在Management Studio中连接到其数据库的不同副本,   并抱怨他们的更新无效。这将它们发送出去   一系列有缺陷的野鹅追逐步骤试图排除故障   错误的问题。

[Source]

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

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

  2. 如果您使用的是SQL Server 2012,请使用SqlLocalDb进行本地开发。请参阅:"Getting Started with SQL Server 2012 Express LocalDB."

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