Что такое строка подключения для 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
это то, что я создал вручную, который является частным.
Если у вас уже есть база данных (файл.mdf):
"Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
Если у вас нет базы данных 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
версия.
для нахождения программно я использую этот метод, который объяснил в этом посте
Это для других, которые, как и я, изо всех сил пытались бы заставить это работать... Я потратил больше половины дня на кажущуюся тривиальной вещь...
Если вы хотите использовать 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.