Что такое строка подключения для localdb для версии 11

Я пытаюсь сделать Code First Walkthrough структуры сущностей ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx).

У меня установлена ​​последняя версия SQL Server Express, и когда я проверяю свои версии, доступные через командную строку (информация sqllocaldb): я вижу localdbApp1 и v11.0. Когда я пытаюсь запустить пошаговое руководство с несколькими незначительными изменениями, я получаю сообщение об ошибке подключения.

Мой app.config выглядит так:

<parameter value="Server=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />

Я написал простой тест подключения, как показано ниже, и код возвращает ту же ошибку подключения SQL ((поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть подключение к SQL Server)).

new System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True").Open();

Я пытался заменить "Data Source=..." с "Server=..." но безрезультатно там.

Есть идеи, какой должна быть строка подключения?

8 ответов

1) Требуется.NET Framework 4, обновленная как минимум до 4.0.2. Если у вас 4.0.2, то вы должны иметь

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2

Если вы установили последнюю версию VS 2012, скорее всего, у вас уже есть 4.0.2. Просто проверьте сначала.

2) Далее вам нужно иметь экземпляр LocalDb, По умолчанию у вас есть экземпляр, имя которого является одним v за ним следует номер версии выпуска LocalDB в формате xx.x. Например, v11.0 представляет SQL Server 2012. Автоматические экземпляры являются общедоступными по умолчанию. Вы также можете иметь именованные экземпляры, которые являются частными. Именованные экземпляры обеспечивают изоляцию от других экземпляров и могут повысить производительность, уменьшая конфликт ресурсов с другими пользователями базы данных. Вы можете проверить статус экземпляров, используя SqlLocalDb.exe утилита (запустить ее из командной строки).

3) Далее ваша строка подключения должна выглядеть так:

"Server=(localdb)\\v11.0;Integrated Security=true;"

или же

"Data Source=(localdb)\\test;Integrated Security=true;"

из вашего кода. Они оба одинаковы. Обратите внимание на два \\ требуется, потому что \v а также \t означает специальные символы. Также обратите внимание, что то, что появляется после (localdb)\\ это имя вашего экземпляра LocalDb. v11.0 является общедоступным экземпляром по умолчанию, test это то, что я создал вручную, который является частным.

  1. Если у вас уже есть база данных (файл.mdf):

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. Если у вас нет базы данных Sql Server:

    "Server=(localdb)\\v11.0;Integrated Security=true;"
    

И вы можете создать свою собственную базу данных программно:

а) сохранить его в папке по умолчанию с настройками по умолчанию:

var query = "CREATE DATABASE myDbName;";

б) Чтобы сохранить его в определенном месте с вашими собственными настройками:

// your db name
string dbName = "myDbName";

// path to your db files:
// ensure that the directory exists and you have read write permission.
string[] files = { Path.Combine(Application.StartupPath, dbName + ".mdf"), 
                   Path.Combine(Application.StartupPath, dbName + ".ldf") };

// db creation query:
// note that the data file and log file have different logical names
var query = "CREATE DATABASE " + dbName +
    " ON PRIMARY" +
    " (NAME = " + dbName + "_data," +
    " FILENAME = '" + files[0] + "'," +
    " SIZE = 3MB," +
    " MAXSIZE = 10MB," +
    " FILEGROWTH = 10%)" +

    " LOG ON" +
    " (NAME = " + dbName + "_log," +
    " FILENAME = '" + files[1] + "'," +
    " SIZE = 1MB," +
    " MAXSIZE = 5MB," +
    " FILEGROWTH = 10%)" +
    ";";

И выполнить!

Пример таблицы может быть загружен в базу данных примерно так:

 @"CREATE TABLE supportContacts 
    (
        id int identity primary key, 
        type varchar(20), 
        details varchar(30)
    );
   INSERT INTO supportContacts
   (type, details)
   VALUES
   ('Email', 'admin@sqlfiddle.com'),
   ('Twitter', '@sqlfiddle');";

Обратите внимание, что SqlLocalDb.exe Утилита не дает вам доступа к базам данных, вам нужно отдельно sqlcmd утилита, которая печальна..

РЕДАКТИРОВАТЬ: перемещение точки с запятой, в противном случае возникнет ошибка, если код был скопирован / вставлен

Это довольно старая тема, но поскольку я переустанавливал свое сообщество Visual Studio 2015 сегодня, я подумал, что мог бы добавить некоторую информацию о том, что использовать на VS2015, или что может работать в целом.

Чтобы увидеть, какие экземпляры были установлены по умолчанию, введите sqllocaldb info внутри командной строки. На моей машине я получаю два экземпляра, первый из которых называется MSSQLLocalDB,

C:\>sqllocaldb info
MSSQLLocalDB
ProjectsV13

Вы также можете создать новый экземпляр, если хотите, используя sqllocaldb create "some_instance_name", но по умолчанию будет работать нормально:

// if not using a verbatim string literal, don't forget to escape backslashes
@"Server=(localdb)\MSSQLLocalDB;Integrated Security=true;"

Я установил упомянутое обновление.Net 4.0.2, но получил то же сообщение об ошибке:

При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром

Я проверил SqlLocalDb через консоль следующим образом:

C:\>sqllocaldb create "Test"
LocalDB instance "Test" created with version 11.0.

C:\>sqllocaldb start "Test"
LocalDB instance "Test" started.

C:\>sqllocaldb info "Test"
Name:               Test
Version:            11.0.2100.60
Shared name:
Owner:              PC\TESTUSER
Auto-create:        No
State:              Running
Last start time:    05.09.2012 21:14:14
Instance pipe name: np:\\.\pipe\LOCALDB#B8A5271F\tsql\query

Это означает, что SqlLocalDb установлен и работает правильно. Так по какой причине я не смог подключиться к SqlLocalDB через.Net код с этой строкой соединения: Server=(LocalDB)\v11.0;Integrated Security=true;?

Затем я понял, что мое приложение было скомпилировано для DotNet Framework 3.5, но SqlLocalDb работает только для DotNet 4.0.

После исправления этого проблема была решена.

У меня была такая же проблема немного. Я заметил, что у меня было:

Data Source= (localdb)\v11.0"

Просто добавив одну обратную косую черту, я решил эту проблему:

Data Source= (localdb)\\v11.0"

В файлах базы данных Sql Server 2008 R2 вы можете подключиться с

Server=np:\\.\pipe\YourInstance\tsql\query;InitialCatalog=yourDataBase;Trusted_Connection=True;

только, но в SQL Server 2012 вы можете использовать это:

Сервер =(localdb)\v11.0; Интегрированная безопасность =true; База данных =DB1;

и это зависело от вашего .mdf.ldf версия.

для нахождения программно я использую этот метод, который объяснил в этом посте

Вам необходимо установить Dot Net 4.0.2 или выше, как указано здесь.
Биты 4.0 не понимают синтаксис, требуемый LocalDB

Смотрите этот вопрос здесь

Вы можете скачать обновление здесь

Это для других, которые, как и я, изо всех сил пытались бы заставить это работать... Я потратил больше половины дня на кажущуюся тривиальной вещь...

Если вы хотите использовать SQL Express 2012 LocalDB от VS2010, у вас должен быть установлен этот патч http://www.microsoft.com/en-us/download/details.aspx?id=27756

Как упомянуто в комментариях выше, у меня тоже был Microsoft .NET Framework версии 4.0.30319 SP1Rel, и поскольку везде упоминалось, что вам нужен "Framework 4.0.2 или выше", я подумал, что мне пора...

Однако, когда я явно скачал этот патч 4.0.2 и установил его, я получил его работать....

У меня есть строка подключения Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

и даже программа .NET 3.5 подключается и успешно выполняет SQL.

Но многие люди говорят, что требуется.NET 4.0.2 или 4.5.

Другие вопросы по тегам