2013-01-15 68 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