Каковы ограничения контекстного подключения CLR

Я пытаюсь преобразовать некоторый существующий код С# в хранимую процедуру CLR. Очевидной строкой подключения является контекстное подключение ("context connection = true").

Проблема, с которой я сталкиваюсь, заключается в том, что некоторые вещи, по-видимому, не работают с этим типом подключения. Последней вещью является сбой метода SqlConnection.GetSchema. Ошибка просто говорит, что она недоступна для контекстного соединения. Есть ли где-то список вещей, которые не будут работать при контекстном соединении?


person Kevin Gale    schedule 17.03.2009    source источник
comment
Можете ли вы вставить исключение и трассировку стека?   -  person Kev    schedule 17.03.2009
comment
Я мог бы, но я не ищу помощи с этой конкретной ошибкой. Сообщение очень ясное. Это не работает с контекстным соединением. Чего я не могу найти, так это причины, по которым это не работает, или списка других вещей, которые могут не работать.   -  person Kevin Gale    schedule 17.03.2009


Ответы (3)


Возможно, вы уже встречались с этим в электронной документации MSDN SQL Server 2008 однако по следующей ссылке объясняются ограничения, накладываемые при использовании контекстных соединений:

Ограничения на обычные и контекстные подключения

Если вы опубликуете полное исключение и трассировку стека, то из сборок .NET FX (с использованием .NET Reflector) или тех, которые развернуты с SQL 2005/2008, можно будет выяснить, почему возникает это исключение.

person Kev    schedule 17.03.2009
comment
Спасибо, эта ссылка была полезной. У меня нет под рукой трассировки стека. Я просто вызываю DataTable tbl = dbcon.GetSchema(Tables); и он не говорит, что это не разрешено для контекстного соединения. - person Kevin Gale; 18.03.2009
comment
На самом деле я не ищу помощи по конкретной ошибке, просто больше информации о том, что еще может не работать. - person Kevin Gale; 18.03.2009

Кому-то это может пригодиться:

    System.Data.DataTable schema = null;
    using (System.Data.SqlClient.SqlCommand cmd = database.Connection.CreateCommand())
    {
        cmd.CommandText = string.Format( "SELECT TOP 1 * FROM {0}", mainTable );
        cmd.CommandType = System.Data.CommandType.Text;
        using (System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader())
        {
            schema = rdr.GetSchemaTable();
        }
    }
person Community    schedule 16.06.2009

После еще нескольких поисков я нашел этот список вещей, которые не будут работать с контекстным соединением здесь. Некоторые из них также описаны в приведенной выше ссылке на книги по SQL, но не все.

Вещи, которые не работают с контекстным соединением.

  • Метод смены пароля
  • Метод GetSchema
  • Пул соединений и связанные с ним параметры и методы
  • Прозрачный переход на другой ресурс при использовании зеркального отображения базы данных
  • Статистика клиента PacketSize, WorkstationID и другая информация о клиенте
person Kevin Gale    schedule 17.03.2009