Подтвердить что ты не робот

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

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

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

Мой app.config выглядит следующим образом:

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

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

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

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

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

4b9b3361

Ответ 1

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 - это то, что я создал вручную, что является приватным.

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

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

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

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

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

var query = "CREATE DATABASE myDbName;";

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

// 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', '[email protected]'),
   ('Twitter', '@sqlfiddle');";

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

EDIT: перемещенная позиция точки с запятой, иначе ошибка возникла бы, если бы код был скопирован/вставлен

Ответ 2

Я установил указанное обновление .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.

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

Ответ 3

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

Data Source= (localdb)\v11.0"

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

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

Ответ 4

Это довольно старый поток, но с тех пор, как я переустановил сообщество 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;"

Ответ 5

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

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

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

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

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

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

Ответ 7

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

Если вы хотите использовать 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 и установил его, я получил его работу.

Ответ 8

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

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

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