Bil*_*sen 62 c# sql-server connection-string sql-server-2012 localdb
我正在尝试实体框架的Code First演练(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" />
Run Code Online (Sandbox Code Playgroud)
我写了一个简单的连接测试,如下所示,代码返回相同的SQL连接错误((提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)).
new System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True").Open();
Run Code Online (Sandbox Code Playgroud)
我试着更换"Data Source=..."
用"Server=..."
,但无济于事那里.
任何想法连接字符串应该是什么?
naw*_*fal 96
1)要求.NET框架4更新到至少4.0.2.如果你有4.0.2,那么你应该有
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2
Run Code Online (Sandbox Code Playgroud)
如果你已经安装了最新的VS 2012,那么你已经有了4.0.2.先验证一下.
2)接下来你需要有一个实例LocalDb
.默认情况下,您有一个实例,其名称是单个v
字符,后跟Localx版本号,格式为xx.x. 例如,v11.0
表示SQL Server 2012. 默认情况下,自动实例是公共的.您还可以拥有私有的命名实例.命名实例提供与其他实例的隔离,并可通过减少与其他数据库用户的资源争用来提高性能.您可以使用该SqlLocalDb.exe
实用程序检查实例的状态(从命令行运行它).
3)接下来你的连接字符串应如下所示:
"Server=(localdb)\\v11.0;Integrated Security=true;"
Run Code Online (Sandbox Code Playgroud)
要么
"Data Source=(localdb)\\test;Integrated Security=true;"
Run Code Online (Sandbox Code Playgroud)
从你的代码.它们都是一样的.注意两个\\
必需的因为\v
并且\t
意味着特殊字符.另请注意,之后出现的(localdb)\\
是LocalDb实例的名称.v11.0
是默认的公共实例,test
是我手动创建的私有实例.
如果您已经有一个数据库(.mdf文件):
"Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
Run Code Online (Sandbox Code Playgroud)如果您没有Sql Server数据库:
"Server=(localdb)\\v11.0;Integrated Security=true;"
Run Code Online (Sandbox Code Playgroud)您可以通过编程方式创建自己的数据库:
a)使用默认设置将其保存在默认位置:
var query = "CREATE DATABASE myDbName;";
Run Code Online (Sandbox Code Playgroud)
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%)" +
";";
Run Code Online (Sandbox Code Playgroud)
并执行!
可以使用以下内容将示例表加载到数据库中:
@"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');";
Run Code Online (Sandbox Code Playgroud)
请注意,SqlLocalDb.exe
实用程序不会让您访问数据库,您需要单独使用sqlcmd
实用程序,这是悲伤的..
编辑:移动分号的位置否则如果代码被复制/粘贴将发生错误
小智 17
我安装了上面提到的.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
Run Code Online (Sandbox Code Playgroud)
这意味着SqlLocalDb已正确安装并运行.那么我无法通过此连接字符串通过.Net代码连接到SqlLocalDB的原因是什么Server=(LocalDB)\v11.0;Integrated Security=true;
?
然后我意识到我的应用程序是为DotNet framework 3.5编译的,但SqlLocalDb仅适用于DotNet 4.0.
纠正之后,问题就解决了.
Gro*_*roo 15
这是一个相当老的线程,但是自从我今天重新安装我的Visual Studio 2015社区以来,我想我可能会添加一些关于在VS2015上使用什么的信息,或者一般可能有用的信息.
要查看默认安装的实例,请sqllocaldb info
在命令提示符下键入.在我的机器上,我得到两个实例,第一个命名MSSQLLocalDB
.
C:\>sqllocaldb info
MSSQLLocalDB
ProjectsV13
Run Code Online (Sandbox Code Playgroud)
如果您愿意,也可以使用创建新实例sqllocaldb create "some_instance_name"
,但默认设置可以正常工作:
// if not using a verbatim string literal, don't forget to escape backslashes
@"Server=(localdb)\MSSQLLocalDB;Integrated Security=true;"
Run Code Online (Sandbox Code Playgroud)
我有一点同样的问题.我注意到我有:
Data Source= (localdb)\v11.0"
Run Code Online (Sandbox Code Playgroud)
只需添加一个反斜杠,它就解决了我的问题:
Data Source= (localdb)\\v11.0"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
168786 次 |
最近记录: |