如何从 .net 代码中获取 SQL Management Studio 的执行字符串
如何从 .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# 代码中获取存储过程执行字符串?最佳方法是什么?谢谢
在这个问题中,原作者表示他的声望还不够高,无法在StackOverflow上进行评论,所以他将问题作为答案发布。他提到了一个名为SMO的.NET对象模型,可以用来与SQL Server进行交互。使用SMO,可以获取到一个特定存储过程的引用,并枚举其参数。这可能有助于你开始解决问题。
原作者称自己从未考虑过使用SMO。他猜测SQL Server Profiler在内部使用了大量的SMO,也许可以通过某个SMO类轻松地获取所需的字符串。但目前来看,Marc的解决方案看起来最好。感谢。
根据以上内容,可以得出这个问题的原因是:原作者想要从.NET代码中获取SQL Management Studio的执行字符串。解决方法是使用SMO来获取存储过程的参数信息。
从上面的内容可以看出,问题的出现原因是在使用.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"的链接来了解更多关于从数据库获取模式信息的内容。
希望对您有所帮助。