【问题标题】:Check for either ADO.NET / OLEDB Connection presence检查 ADO.NET / OLEDB 连接是否存在
【发布时间】:2012-06-28 07:28:47
【问题描述】:

我正在开发一个自定义 SSIS 组件以供整个公司使用。现在代码(来自here)只接受 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,它应该被接受,如果它们都不是,它应该失败。

我不是一个 C# 人,因此我正在寻找任何我能得到的帮助。谢谢你的帮助。

【问题讨论】:

标签: c# ado.net ssis oledb custom-component


【解决方案1】:

您可以使用is 关键字来确定对象是否是指定类型的实例(或派生自指定类型的类型)。 see 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;
}

【讨论】:

  • 我在代码中也有插入语句。你也能帮我吗?
  • 我不太清楚你的意思。我认为您应该将其作为一个新问题发布。这样,您将能够提供更好的解释,并让其他人也从中受益。不客气。 :)
  • 对不起,我不得不回滚答案。但是您建议的两种方式似乎都不起作用。它仅适用于 ADO.NET,不适用于 OLEDB。
  • 我从BOL进一步发现“在Script组件中编写托管代码时,不能调用返回非托管对象的连接管理器的AcquireConnection方法,例如OLE DB连接管理器和Excel连接管理器。但是,您可以读取这些连接管理器的 ConnectionString 属性,并使用 System.Data.OleDb 命名空间中的 OLEDB 连接的连接字符串直接在代码中连接到数据源"
猜你喜欢
  • 2012-06-28
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多