如何从 .net 代码中获取 SQL Management Studio 的执行字符串

8 浏览
0 Comments

如何从 .net 代码中获取 SQL Management Studio 的执行字符串

我正在调试别人编写的代码,该代码从C#代码中调用了许多存储过程(SQL Server 2008 R2)。C#代码如下:

SqlCommand sqlCommand = new SqlCommand(strSP, ConnectionOpen());
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandTimeout = intTimeOut;
//System.Data.SqlClient.SqlParameter[] prmSQL
if (prmSQL != null)
{
  while (i < prmSQL.Length)
  {
    sqlCommand.Parameters.Add(prmSQL[i]);
    i = i + 1;
  }
}
SqlDataReader sqlReader = sqlCommand.ExecuteReader();

为了调试我的存储过程,我真的需要类似于 SQL Management Studio 需要的字符串,如下:

exec sp_name param one, param two(如果需要,字符串和日期需要加引号..)

SQL 命令对象没有通过某个属性提供此字符串。我知道的唯一方法是在 SQL Server 上运行 SQL Profiler 并抓取该字符串。不幸的是,DBA 不喜欢这样做,因为他们说运行 Profiler 会影响性能。是否有任何插件或代码片段可以从 C# 代码中获取存储过程执行字符串?最佳方法是什么?谢谢

0
0 Comments

在这个问题中,原作者表示他的声望还不够高,无法在StackOverflow上进行评论,所以他将问题作为答案发布。他提到了一个名为SMO的.NET对象模型,可以用来与SQL Server进行交互。使用SMO,可以获取到一个特定存储过程的引用,并枚举其参数。这可能有助于你开始解决问题。

原作者称自己从未考虑过使用SMO。他猜测SQL Server Profiler在内部使用了大量的SMO,也许可以通过某个SMO类轻松地获取所需的字符串。但目前来看,Marc的解决方案看起来最好。感谢。

根据以上内容,可以得出这个问题的原因是:原作者想要从.NET代码中获取SQL Management Studio的执行字符串。解决方法是使用SMO来获取存储过程的参数信息。

0
0 Comments

从上面的内容可以看出,问题的出现原因是在使用.NET代码中,需要从存储过程中获取执行字符串,但是不清楚存储过程的参数名。解决方法是使用GetDbSchemaTable方法来检索存储过程的SQL,从中获取参数列表。具体的代码如下:

using (conn == new OleDb.OleDbConnection(DBConnection)) {
    conn.Open();
    DataTable DBObject = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Procedures, null);
}

上述代码中,通过使用GetOleDbSchemaTable方法来获取存储过程的相关信息,其中"PROCEDURE_DEFINITION"列包含存储过程的SQL和参数列表。另外,还可以参考"Obtaining Schema Information from a Database"的链接来了解更多关于从数据库获取模式信息的内容。

希望对您有所帮助。

0
0 Comments

问题的原因是用户想要从.NET代码中获取SQL Management Studio的执行字符串。解决方法是使用mvc-mini-profiler工具,该工具可以在NuGet上获得。用户需要使用抽象的DbConnection而不是SqlConnection来包装连接,并且需要更改创建连接的代码。还需要进行一些其他步骤来启用工具。mvc-mini-profiler可以实时监控启用的用户的所有活动,并且可以在SSMS中以可运行的形式呈现数据。它也与LINQ-to-SQL和dapper-dot-net等ORM工具兼容。

0