Как использовать C# для получения Showplan через DDtek - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь использовать библиотеку DDTek Ado. Net для Sybase Server в C#, чтобы найти план показа запроса.

Мне было интересно, знает ли кто-нибудь, как можно использовать библиотеку 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();
                }

Где основная Sql Переменная - это вызов хранимой процедуры вокруг запроса select с строками:

set showplan on 
--set noexec on
set fmtonly on

При запуске в Rapid SQL создается план показа без возвращаемых строк данных. Использование отладчика для детализации возвращаемого объекта не дало никакой информации о плане показа. Возможно, я искал не в том месте?

1 Ответ

0 голосов
/ 18 марта 2020

Разобрался. Не используйте хранимую процедуру. Поместите запрос выбора в основную переменную Sql. Не выполняйте с ExecuteReader, выполните обе команды Show Plan и выберите запрос с помощью .ExecuteNonQuery.

Это вызывает обратный вызов InfoMessage в объекте Errors переданных в него SybaseInfoArgs. Их можно объединить в сообщение, похожее на то, что вы получаете в Rapid Sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...