Проверьте наличие соединения ADO.NET/OLEDB.

Я разрабатываю специальный компонент SSIS для использования во всей моей компании. Прямо сейчас код (который взят из здесь) принимает только тип подключения ADO.NET.

Я также хотел бы поддерживать тип OLEDB и соответствующим образом изменить свой код. Фрагмент кода, который проверяет правильность подключения ADO.NET:

SqlConnection connection = connections[_connectionName].AcquireConnection(null) as SqlConnection;

     if (connection == null)
          {
          componentEvents.FireError(0, METHOD_NAME, "The connection is not a valid ADO.NET connection", "", -1);
          return DTSExecResult.Failure;
          }

Это просто проверит действительное соединение ADO.NET. Как бы я изменил это, чтобы ТАКЖЕ проверить соединение OLEDB. Так, например, если тип подключения — OLEDB, он должен быть принят, если ни один из них, он не должен работать.

Я не очень разбираюсь в С#, и поэтому я ищу любую помощь, которую я могу получить в этом. Спасибо за любую помощь.


person rvphx    schedule 26.06.2012    source источник
comment
Я нашел рабочее решение [1] для этого. [1]: stackoverflow.com /вопросы/11265706/   -  person rvphx    schedule 09.07.2012


Ответы (1)


Вы можете использовать ключевое слово is, чтобы определить, является ли объект экземпляром указанного типа (или типом, производным от указанного типа). см. MSDN

var connection = connections[_connectionName].AcquireConnection(null);

if (!(connection is SqlConnection || connection is OleDbConnection))
{
     componentEvents.FireError(0, METHOD_NAME, "The connection is not a valid ADO.NET connection", "", -1);
          return DTSExecResult.Failure;
}

Если вы хотите определить, относится ли соединение к какому-либо типу DbConnection (из которого вытекают как SqlConnection, так и OleDbConnection), вы можете сделать следующее:

DbConnection connection = connections[_connectionName].AcquireConnection(null) as DbConnection;

if (connection == null)
{
    componentEvents.FireError(0, METHOD_NAME, "The connection is not a valid ADO.NET connection", "", -1);
    return DTSExecResult.Failure;
}
person Kevin Aenmey    schedule 26.06.2012
comment
У меня также есть оператор вставки в коде. Можете ли вы помочь мне и в этом? - person rvphx; 27.06.2012
comment
Я не совсем уверен, что вы имеете в виду. Я думаю, вы должны опубликовать это как новый вопрос. Таким образом, вы сможете дать лучшее объяснение и позволить другим извлечь из этого пользу. Пожалуйста. :) - person Kevin Aenmey; 27.06.2012
comment
Опубликован новый вопрос!! stackoverflow.com/questions/11216753/ - person rvphx; 27.06.2012
comment
Извините, мне пришлось откатить ответ. Но ни один из предложенных вами способов не работает. Он работает только для ADO.NET, но не для OLEDB. - person rvphx; 27.06.2012
comment
Кроме того, я узнал из BOL. Когда вы пишете управляемый код в компоненте Script, вы не можете вызывать метод AcquireConnection диспетчеров соединений, которые возвращают неуправляемые объекты, такие как диспетчер соединений OLE DB и диспетчер соединений Excel. Однако вы можете прочитать свойство ConnectionString этих диспетчеров соединений и подключиться к источнику данных непосредственно в коде, используя строку соединения соединения OLEDB из пространства имен System.Data.OleDb. - person rvphx; 28.06.2012