2013-01-15 67 views
1

我在Project文件夹中有SQL SERVER数据库文件。 Debug文件夹中的相同文件副本。我在SQL Server中附加这两个文件。项目文件夹表中的文件在所有字段中都包含空值。但是从Debug文件夹附加的文件中有数据。我使用Project文件夹中的文件创建了连接字符串。其实哪个数据库文件是正确的文件?试着解决这个问题。SQL Server中的数据库连接和数据保存

连接字符串

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

'哪个数据库文件是正确的文件' - 我们该怎么知道?你想做什么? – Bridge

+0

@Bridge - 我尝试从VB.NET表单插入数据到数据库中。当我按提交按钮时,它显示消息“成功添加”。但我检查数据库表。所有字段都有空值。我从Debug目录中附加数据库文件后。它的表格有数据。那么哪个数据库文件是主数据库?在项目目录或Debug目录中? – Thanzeem

+2

如果您试图直接附加到SQL/Server数据库文件,那么您几乎肯定会以错误的方式执行操作。 – PeterJ

回答

1

用户实例贬值,可能是什么导致了这种混乱。

引用SQL服务器MVP阿隆贝特朗:

使用用户实例意味着SQL服务器是由你的程序创建一个数据库文件中使用的特殊副本 。如果您有两个不同的程序使用同一个连接字符串,他们会得到两个完全不同的数据库副本。这会导致很多 混淆,因为人们将用他们的程序测试更新数据,然后 连接到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。我最不喜欢这个选项,因为功能和语法不尽相同 - 所以它不一定会为您提供您最终要部署的所有功能。

+0

我更改了我的连接字符串'Data Source =。\ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ EMP_DB.mdf; Initial Catalog = EMP_DB; Integrated Security = True; Connect Timeout = 30; User Instance = False'。现在它的工作很好......现在我的混乱清除了。 – Thanzeem

+0

你不应该需要'AttachDbFilename'部分 - 你的数据库一次连接到服务器,你不需要再附加它!另外,'User Instance'的默认值是false,所以不需要包含它。试试这个:'Data Source =。\ SQLEXPRESS; Initial Catalog = EMP_DB; Integrated Security = True; Connect Timeout = 30;' – Bridge