C# 连接字符串中下划线后的数据库名称将被忽略

C# 连接字符串中下划线后的数据库名称将被忽略,c#,.net,sql,C#,.net,Sql,我正在尝试做一些我认为很简单的事情。 我有一个从数据库中获取的连接字符串。当我创建一个新的SQL连接实例时,当我调试和查看对象时,它看起来像是在正确填充db连接字符串。但是,我得到的错误消息使我认为数据库名称中下划线之后的所有信息都被删除了 代码示例: Database db = new SqlDatabase(ConnectionString); // Connection string appears correct DbCommand dbCommand = db.GetStoredPro

我正在尝试做一些我认为很简单的事情。 我有一个从数据库中获取的连接字符串。当我创建一个新的SQL连接实例时,当我调试和查看对象时,它看起来像是在正确填充db连接字符串。但是,我得到的错误消息使我认为数据库名称中下划线之后的所有信息都被删除了

代码示例:

Database db = new SqlDatabase(ConnectionString); // Connection string appears correct
DbCommand dbCommand = db.GetStoredProcCommand("StoredProcName");
DataSet approverDataset = db.ExecuteDataSet(dbCommand); // when this executes, exception is generated
当我运行此代码时,会收到以下异常消息: 服务器主体testdb_psidentity无法在当前安全上下文下访问数据库testdb

这是我的连接字符串:

DataSource=testserver.com;Database=testdb_ps;Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd
我已尝试将此更改为:

DataSource=testserver.com;Database=[testdb_ps];Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd
虽然这似乎得到了数据库的全名,但它似乎也在寻找名称中包含这些括号的数据库。当我遇到这个错误时: 无法打开登录请求的数据库[testdb_ps]。登录失败。 用户“testdb_psidentity”登录失败

但是,我可以在SQLServerManagementStudio中使用该登录名/密码登录连接到数据库


我能让它接受数据库名testdb\u ps数据库名吗?我无法简单地更改数据库名称,因为我没有访问权限,而且我被告知更改数据库名称根本不会发生。

您可以尝试在连接字符串周围加引号,我认为这是将下划线解释为分隔符

根据您使用它的方式,请使用引号或

"

您是否能够通过SQL server management studio连接到数据库

试一试

禁用防火墙 使用IP地址 显式使用sql server实例名称。
使用向导生成实体类。这样,您将在app.config中获得编码的连接字符串

您的用户testdb\u psidentity是否对数据库具有连接/执行权限?如果您不确定,您可以通过转到->右键单击数据库->属性->权限->选择用户并在“显式”选项卡下进行检查…遗憾的是,当我右键单击数据库时,我没有权限查看此内容。Reach但尝试将数据源置于语法[testserver.com]或[testserver].[com]中。并且您确定源的名称是testserver.com而不是testserver。查看SMSS中的名称您的用户名没有访问数据库的权限。检查许可证请看。你的报价有问题吗?你是什么意思?我试着将它用作字符串变量。我没有尝试过对其进行编码,但在我们的编码标准中,这通常是不受欢迎的。通常,我们将连接字符串放在web.config或app.config文件中。这就是为什么我们对‘‘’字符没有真正的问题。但是,如果必须从数据库获取连接字符串,可以尝试先将其写入字符串,然后将该字符串发送进来。在某些情况下,当您不能只键入字符时,会使用,但如果您在c中使用字符串文字,则不需要它,而只需要一个建议,但如果此数据库已经存在一段时间,那么我会假设其他应用程序使用它?如果是这样的话,你可以看看他们是怎么做的。