【问题标题】:Set current database before calling stored procedure?在调用存储过程之前设置当前数据库?
【发布时间】:2012-11-14 08:33:36
【问题描述】:

考虑一下 C# 中的这段代码:

var command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "usp_my_procedure";

当我执行这个命令时,SQL Server(或MySQL 服务器)知道我想在哪个数据库中运行这个存储过程?

这里最好的约定是什么(同时考虑性能和安全性)?我应该...

  1. 明确指定数据库名称?
  2. 每次创建连接后使用USE 命令设置默认数据库?
  3. 假设当前数据库已经被连接设置了? (例如Database=mydb
  4. 其他?

另外,在 SQL Server 中,我认为最好明确指定数据库所有者:

command.CommandText = "dbo.usp_my_procedure";

【问题讨论】:

    标签: c# mysql sql-server


    【解决方案1】:
    objSqlConnection.ChangeDatabase("Database");
    

    command.CommandText = "database.dbo.usp_my_procedure";
    

    希望对你有帮助

    【讨论】:

    • 虽然ChangeDatabase 确实有用,但这并不能回答我的问题。
    【解决方案2】:

    如果您打算对一个数据库使用连接,并且您确定它不会被更改,那么您可以设置当前数据库一次 - 使用 USE 命令或仅使用连接字符串。在这种情况下,您可以省略对象全名 - 使用 dbo.table1 而不是 db_name.dbo.table1

    如果您要修改/引用某些数据库中的对象,那么您有一个选择:在语句之前执行 USE 命令,或使用全名 - db_name.dbo.table1。您可以自己回答这个问题 - 哪个更适合您。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2014-05-09
      • 1970-01-01
      • 2013-02-15
      • 2021-01-28
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多