Вопрос по c#, sql-server – Что такое строка подключения для localdb для версии 11

62

Я пытаюсь выполнить Code First Walkthrough структуры сущностей (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 выглядит так:

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

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

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

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

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

Я не говорю, что это является причиной проблемы, потому что может быть и больше, но обратные слеши являются специальными в строках C #, если вы не предшествуете им@: @"(LocalDB)\v11.0". user743382
В строке подключения нет базы данных. Gert Arnold
Правда, я не добавил символ @. Я повторил попытку и вернул тот же результат. Bill Nielsen
Проверь мойHow to Answer[1] по аналогичному вопросу. [1]:stackoverflow.com/a/27459473/3506427 bogdan.rusu
Это может быть глупый вопрос, но вы уверены, что ваше приложение компилируется для .NET 4.x? Приложения .NET 3.5 будут выдавать эту ошибку, поскольку .NET 3.5 не понимает(localdb) название сервера. Krzysztof Kozielczyk

Ваш Ответ

8   ответов
17

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

A network-related or instance-specific error occurred while establishing a connection to 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.

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

94

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 utility (run it from command line).

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

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

или же

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

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

  1. If you have a database (.mdf file) already:

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. If you don't have a Sql Server database:

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

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

а)to save it in the default location with default setting:

var query = "CREATE DATABASE myDbName;";

б)To save it in a specific location with your own custom settings:

// 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 утилита, которая печальна ..

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Bill Nielsen
0

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

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

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

1

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

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

11

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

В файлах базы данных 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 версия.

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

9

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

Data Source= (localdb)\v11.0"

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

Data Source= (localdb)\\v11.0"
Error: User Rate Limit Exceeded"\v"Error: User Rate Limit Exceededvertical tabError: User Rate Limit Exceeded

Похожие вопросы