我在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
答案 0 :(得分:1)
用户实例已弃用,可能导致此混淆。
引用SQL Server MVP Aaron Bertrand:
使用用户实例意味着SQL Server正在创建特殊副本 您的程序使用的数据库文件。如果你有两个 使用相同连接字符串的不同程序,它们得到两个 完全不同的数据库副本。这导致了很多 混乱,因为人们将测试用他们的程序更新数据,然后 在Management Studio中连接到其数据库的不同副本, 并抱怨他们的更新无效。这将它们发送出去 一系列有缺陷的野鹅追逐步骤试图排除故障 错误的问题。
[Source]
他还在同一篇文章中列出了一些替代方案:
创建数据库或将数据库附加到SQL Server的实际实例。然后,您的连接字符串只需指定实例名称,数据库名称和凭据。由于Management Studio,Visual Studio和您的程序都将连接到数据库的单个副本,因此不会出现混淆。
如果您使用的是SQL Server 2012,请使用SqlLocalDb进行本地开发。请参阅:"Getting Started with SQL Server 2012 Express LocalDB."
使用SQL Server Compact。我最喜欢这个选项,因为功能和语法不一样 - 所以它不一定会为你提供你最终想要部署的所有功能。