【问题标题】:Use of database name in connection string在连接字符串中使用数据库名称
【发布时间】:2015-01-30 04:14:11
【问题描述】:

在打开从 dot net 应用程序到 SQL 服务器的连接时,在连接字符串中提及数据库名称有什么用?因为即使我们在连接字符串中提到了数据库名称,如果该特定用户的默认数据库不同,我们必须在调用存储过程时显式写入完全限定名称 (DBName.schemaName.ProcName)。

【问题讨论】:

  • “即使我们提到了数据库名称......如果该特定用户的默认数据库不同” - 不是我的经验。如果在连接字符串中命名数据库,则不需要同时使用数据库名称来调用存储过程。

标签: sql .net sql-server


【解决方案1】:

从 .NET 应用程序连接到数据库不同于访问不同数据库的表。

在连接字符串中提及数据库名称的使用

例如,您可以使用下面的连接字符串连接到 MyServer 上的 myDB

Data Source=MyServer;初始目录=myDB;Integrated Security=True

如果您至少不指定这些信息,您的 .NET 应用程序如何连接到位于 myDB 中的存储过程 (MyProcInMyDB)。

现在你问的部分

虽然我们在调用存储过程时提到了数据库名称 if 该特定用户的默认数据库不同

这不是使用相同连接字符串访问另一个数据库的存储过程的正常情况,如果这是一种非常特殊的情况(不太可能),那么您将调用一个或两个存储过程。但是,如果在您的应用程序中经常需要它,那么您应该创建一个单独的连接字符串。使用相同的连接字符串并调用类似

command.CommandText = "myDB2.dbo.getList"

可能导致难以维护和灵活性

【讨论】:

  • 我的问题是,如果我在用户 MyUser 的连接字符串中提及 MyDB 并尝试通过提及 dbo.MyProcName 来执行存储过程,如果 MyUser 默认 DB 不是 MyDB,则会出错。那么在连接字符串中提到数据库名称的eof有什么用呢?
  • 这应该是因为该用户的安全权限;可能是用户对 myDB 或 proc 执行没有访问权限,但此错误不应该是因为不同的默认数据库。大多数“master”是默认数据库,但我们仍然可以连接到不同的数据库
  • 是的,master 是默认数据库。但错误是“找不到存储过程 MyProcName”。 MyUser 对 MyProcName 具有执行访问权限,当我将 MyUser 的默认 DB 从 master 更改为 MyDB 时,错误得到解决。我的问题再次是,如果 DBName 没有打开与提到的 DB 的连接,那么它在连接字符串中的用途是什么?
猜你喜欢
  • 2020-10-30
  • 2021-10-09
  • 2012-05-20
  • 2019-05-20
  • 2023-03-17
  • 2014-08-28
  • 2020-12-11
  • 1970-01-01
  • 2019-05-27
相关资源
最近更新 更多