Не удается найти ту же хранимую процедуру при использовании ADO.NET - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю функцию, которая требует проверить, существует ли хранимая процедура.Я протестировал следующий код с помощью SSMS

DECLARE @storedProcedureName varchar(50)  = 'usp_GetHHLockMaintenanceStatus'
SELECT object_id, name
FROM sys.procedures
WHERE name = @storedProcedureName

И, как и ожидалось, он возвращает

+-----------+--------------------------------+
| object_id |              name              |
+-----------+--------------------------------+
| 388196433 | usp_GetHHLockMaintenanceStatus |
+-----------+--------------------------------+

Однако, когда я попробовал почти то же самое в ADO.NET

using (var conn = new SqlConnection("Data Source=ServerName,1433;Initial Catalog=DbName;Connect Timeout=60;Integrated Security=True;"))
{
    conn.Open();
    string query = $@"
            SELECT object_id, name
            FROM sys.procedures
            WHERE name = @storedProcedureName";
    using (var cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.AddWithValue("@storedProcedureName", "usp_GetHHLockMaintenanceStatus");
        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
        {
            DataSet resultSet = new DataSet();
            adapter.Fill(resultSet);
        }
    }
}

resultSet как-то пусто ...

Затем я попробовал другой способ

DECLARE @storedProcedureName varchar(50)  = 'usp_GetHHLockMaintenanceStatus'
IF OBJECT_ID(@storedProcedureName, 'P') IS NOT NULL
BEGIN
    SELECT 1
END
ELSE
BEGIN
    SELECT 0
END

, который возвращает 1, как и ожидалось в SSMS.Тем не менее, если я использую ADO.NET, if(SqlDataReader.Read()) будет истинным, но представление результатов покажет

Перечисление не дало результатов

Любая идея, что я сделал неправильно

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