我正在尝试使用C#中Sybase服务器的DDTek Ado.Net库来查找查询的显示计划。
我想知道是否有人知道如何使用Sybase DDtek库来做这件事。下面是我之前尝试过的一些示例代码:
using (SybaseConnection dbConnect = new SybaseConnection())
{
dbConnect.ConnectionString = ConfigurationManager.ConnectionStrings["SybaseDB"].ConnectionString;
dbConnect.StatisticsEnabled = true;
dbConnect.Open();
dbConnect.InfoMessage += OnInfoMessage;
SybaseCommand cmd = new SybaseCommand { CommandTimeout = 1000, Connection = dbConnect };
SybaseCommand cmd2 = new SybaseCommand { CommandTimeout = 1000, Connection = dbConnect };
cmd.CommandText = "SET SHOWPLAN ON";
// int ans = cmd.ExecuteNonQuery();
cmd2.CommandText = mainSql;
SybaseDataReader sDR = cmd2.ExecuteReader();
// var ansp = cmd2.ExecuteNonQuery();
//ans = cmd.ExecuteNonQuery();
String plan = String.Empty;
//sql.ToString();
var stats1 = dbConnect.RetrieveStatistics();
//var ans = cmd.ExecuteScalar();
var stats2 = dbConnect.RetrieveStatistics();
//.ExecuteNonQuery(); // no value needed in return
//cmd.CommandText = "SET SHOWPLAN OFF";
//cmd.ExecuteNonQuery();
dbConnect.Close();
dbConnect.Dispose();
}其中,mainSql变量是对select查询周围的存储过程的调用,具有以下行:
set showplan on
--set noexec on
set fmtonly on在RapidSQL中运行时,将生成不返回任何数据行的显示计划。使用调试器钻取返回的对象时未生成show plan信息。也许我找错地方了?
发布于 2020-03-19 03:21:17
我想通了。不要使用存储过程。将select查询放入mainSql变量中。不要使用ExecuteReader执行,同时使用.ExecuteNonQuery执行显示计划命令和选择查询。
这会在传入的SybaseInfoArgs的Errors对象中触发InfoMessage回调。这些可以连接到一个消息中,就像你在RapidSql中得到的一样。
https://stackoverflow.com/questions/60674513
复制相似问题