2013-09-05 3 views
2

데이터베이스가 존재하는지 여부를 확인하는 코드를 작성했습니다. 존재하지 않는 경우 로컬 디렉토리에서 데이터베이스를 연결하려고합니다. 내 코드는 다음과 같습니다C#을 사용하여 winforms에서 데이터베이스를 연결하는 방법

 SqlConnection con = new SqlConnection(@"Data Source=CENSYS08\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"); 
     con.Open(); 

     SqlDataAdapter da = new SqlDataAdapter("select name from sys.databases", con); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     string[] array = dt 
      .AsEnumerable() 
      .Select(row => row.Field<string>("Name")) 
      .ToArray(); 

     if(!array.Contains("cstmrDB",StringComparer.OrdinalIgnoreCase)) 
     { 
      SqlCommand cmd = new SqlCommand("sp_attach_db"); 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@dbname", "cstmrDB"); 
      cmd.Parameters.AddWithValue("@filename1", @"C:\Naresh WORK AREA\My Projects\AttachDB\Data\cstmrDB.mdf"); 
      cmd.ExecuteNonQuery(); 

     } 

그리고 한 가지 더, 나는 this로 내 로컬 파일에 대한 권한을 준있다.

실제 파일 "C : \ Naresh WORK AREA \ My Projects \ AttachDB \ Data \ cstmrDB.mdf"를 열 수 없습니다. 운영 체제 오류 2 : "2 (지정된 파일을 찾을 수 없습니다.)".

데이터베이스를 SQL Server에 연결할 수 있습니까?

+1

여기에 바보가 되려고하지 않고 파일이 실제로 그 경로에 있습니까? 'C : \ Naresh WORK AREA \ My Projects \ AttachDB \ Data \ cstmrDB.mdf' – paqogomez

+0

yahh .. 확실합니다. 이 파일을 기본 위치에서이 위치로 복사했습니다. Windows 탐색기 주소 표시 줄에서 디렉터리를 복사했습니다. –

+1

이고'CENSYS08'이 (가) 로컬 컴퓨터 이름입니까? – paqogomez

답변

0

당신해야 또한 관련 .LDF (로그 파일) 오류 그렇지 않으면 던질 것이라고의 .mdf와 함께 파일을

+0

필요 없다고 생각합니다. 그렇다면 예. 쿼리에 어떻게 첨부 할 수 있습니까? –

+0

ldf 파일에 @ filename2 매개 변수가 첨부됩니다. 몇 달 전, 그게 커다란 문제 였어 .Cauz는 내 ldf 파일을 잃어 버렸어. 하지만 난 그게 당신의 사건을 해결할 것이라고 생각하지 않는다. 왜냐하면, 지금은 .ldf없이 하나의 db를 연결했는지 확인했기 때문에 아무런 문제가 없었다. ldf 파일은 SQL Server의 필수 항목입니다.를 참조하십시오. 그것은 존재하지 않으면 하나를 만들려고합니다. 과거에 내 문제는 데이터베이스 파일의 이전 위치가 변경되어 .ldf 파일이 이전 위치에 생성되고 현재 MDF가 생성 되었기 때문입니다. – Sayka

+0

다른 위치에있는 두 사람이 문제를 일으켰습니다. .. 데이터베이스 .mdf 파일의 위치 이름을 변경 했습니까? – Sayka

2
당신은 당신의 경로 사용에 공백을 제거해야합니다

'_'같은 - C : \ Naresh_WORK_AREA \ My_Projects \ AttachDB \ Data \ cstmrDB.mdf
여전히이 문제가 해결되지 않으면 다음 코드를 시도하십시오. 또한 쿼리에서 DB 이름을 확인하기 위해 코드에서 추가 단계를 제거 할 수 있습니다.

string query = "select name from sys.databases where name='cstmrDB'"; 
SqlConnection con = new SqlConnection(@"Data Source=CENSYS08\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"); 

    SqlDataAdapter da = new SqlDataAdapter(query , con); 
    DataTable dt = new DataTable(); 

con.Open(); 
    da.Fill(dt); 

if(dt.Rows.Count==0) 
{ 
    query=" CREATE DATABASE AdventureWorks2008R2 ON"+ 
    " (FILENAME = 'C:\Naresh_WORK_AREA\My_Projects\AttachDB\Data\cstmrDB.mdf'), "+ 
    " (FILENAME = 'C:\Naresh_WORK_AREA\My_Projects\AttachDB\Data\cstmrDB.ldf'),"+ 
     " (FILENAME = 'c:\myFTCatalogs\cstmrDBCat')"+ 
    " FOR ATTACH;" 

    SqlCommand cmd = new SqlCommand(query); 
     cmd.Connection = con; 
     cmd.ExecuteNonQuery(); 
} 
con.Close(); 
관련 문제