2013-09-05 3 views
2

Я написал код для проверки базы данных, существует или нет, и если не существует, я пытаюсь прикрепить базу данных из своего локального каталога. Мой код:Как подключить базу данных из winforms с помощью C#

 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.

+1

Не пытайтесь быть рывком здесь, но действительно ли файл существует на этом пути? 'C: \ Naresh WORK AREA \ Мои проекты \ AttachDB \ Data \ cstmrDB.mdf' – paqogomez

+0

yahh .. уверен. Я скопировал этот файл из местоположения по умолчанию в это место. Я скопировал каталог из адресной строки окна explorer. –

+1

и 'CENSYS08' является вашим местным именем? – paqogomez

ответ

0

Вы должны иметь также соответствующий .ldf (лог-файл) файл вместе с .mdf, в противном случае он будет бросать ошибки

+0

Я думаю, что нет необходимости. Если да. Как я могу приложить это тоже в запросе –

+0

ldf файл привязан параметром @ filename2. Несколько месяцев назад это была большая проблема для меня, Кауз, я потерял файл ldf. Но я не думаю, что это решит ваше дело, потому что сейчас я проверял прикрепление одного db без .ldf, и это не было проблемой. См. Файл ldf является обязательным для сервера sql. Он пытается построить один, если не существует. Моя проблема в прошлом заключалась в том, что предыдущее местоположение файла базы данных было изменено, в результате чего файл .ldf был создан в предыдущем местоположении, а mdf - в текущем .. – Sayka

+0

Так что эти два в разных местах вызвали проблему .. Вы изменили название местоположения вашего файла .mdf базы данных ... ?? – Sayka

2

Вы должны удалить пробелы в вашем пути использования «_» как- C: \ Naresh_WORK_AREA \ My_Projects \ AttachDB \ Data \ cstmrDB.mdf
Если эта проблема не решена, попробуйте выполнить следующий код. Также вы можете удалить дополнительный код в своем коде для проверки имени БД в запросе.

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(); 
Смежные вопросы