2013-01-15 2 views
1

Project 폴더에 SQL Server 데이터베이스 파일이 있습니다. 디버그 폴더에 같은 파일 복사본이 있습니다. 이 두 파일을 SQL Server에 첨부합니다. 프로젝트 폴더 테이블의 파일에 모든 필드에 Null 값이 있습니다. 그러나 Debug 폴더에서 첨부 된 파일에 데이터가 있습니다. Project 폴더에있는 파일과 연결 문자열을 만들었습니다. 실제로 어떤 데이터베이스 파일이 올바른 파일입니까? 이 문제를 해결하십시오.SQL Server에서 데이터베이스 연결 및 데이터 저장

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 양식에서 데이터베이스에 데이터를 삽입하려고합니다. 제출 버튼을 누르면 "Successfully added"라는 메시지가 나타납니다. 하지만 데이터베이스 테이블을 확인합니다. 모든 필드에는 Null 값이 있습니다. 디버그 디렉터리에서 데이터베이스 파일을 첨부 한 후. 테이블에 데이터가 있습니다. 그렇다면 어떤 데이터베이스 파일이 기본 데이터베이스입니까? 프로젝트 디렉토리 또는 디버그 디렉토리에 있습니까? – Thanzeem

+2

SQL/Server 데이터베이스 파일에 직접 연결하려는 경우 거의 확실하게 잘못된 방식으로 작업하고 있습니다. – PeterJ

답변

1

사용자 인스턴스는 감가 상각 .. 연결 문자열은

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 

입니다 그리고 이것은 내 코드입니다 아마도이 혼란의 원인은 무엇일까요?

는 SQL 서버 MVP 아론 버트 랜드를 인용 :

사용하여 사용자 인스턴스는 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을 사용하십시오. 기능 및 구문이 동일하지 않기 때문에이 옵션을 가장 좋아합니다. 따라서 궁극적으로 배포하려는 모든 기능을 반드시 제공하지는 않습니다.

+0

연결 문자열'Data Source =. \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ EMP_DB.mdf; 초기 카탈로그 = EMP_DB; 통합 보안 = True; 연결 시간 초과 = 30; 사용자 인스턴스 = 거짓. 이제는 잘 작동합니다 .... 이제 내 혼란이 사라졌습니다. – Thanzeem

+0

당신은'AttachDbFilename' 부분을 필요로하지 않아야합니다 - 여러분의 데이터베이스는 서버에 한번 첨부됩니다. 다시 첨부 할 필요가 없습니다! 또한'User Instance'의 기본값은 false이므로 포함시킬 필요가 없습니다. 이것을 시도하십시오 :'Data Source =. \ SQLEXPRESS; 초기 카탈로그 = EMP_DB; 통합 보안 = True; 연결 시간 초과 = 30; – Bridge

관련 문제