2010-02-17 56 views
3

我在连接管理器中配置了OLEDB连接,我希望在脚本中使用它。该脚本需要调用存储过程,然后创建缓冲区行。我已将该连接添加到可用于脚本的连接,并且这是我的代码。在脚本组件(SSIS)中使用现有连接

Boolean fireagain = true; 

SqlConnection conn = new SqlConnection(); 

conn = (SqlConnection)(Connections.Connection 
    .AcquireConnection(null) as SqlConnection); 


SqlCommand cmd = new SqlCommand(); 

conn.Open(); 

ComponentMetaData.FireInformation(
      0, "Script", "Connection Open", string.Empty, 0, ref fireagain); 

cmd.Connection = conn; 
cmd.CommandText = "up_FullTextParser_select" ; 
cmd.CommandType = CommandType.StoredProcedure; 

cmd.Parameters.AddWithValue("Phrase", DbType.String).Value = Row.Keywords; 
cmd.Parameters.AddWithValue("SpecialTerm", DbType.String).Value = "Exact match"; 
cmd.Parameters.AddWithValue("StopListId", DbType.Int32).Value = 0; 
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

while (rdr.Read()) 
{ 
    TermsBuffer.AddRow(); 

    TermsBuffer.Term = rdr[0].ToString(); 
} 

conn.Close(); 

无论如何,它似乎失败的AcquireConnection。我转换这个错误?我应该使用不同的方式来使用脚本外部定义的连接吗?

+0

请发布任何和所有错误。 – 2010-02-18 07:37:19

+0

'conn =(SqlConnection)(Connections.Connection .AcquireConnection(null)as SqlConnection);' - 这是多余的。用'as',你将返回的对象转换为'SqlConnection'。然后,你将这个'SqlConnection'转换为'SqlConnection'类型,它的定义已经是这样了,除非它是空的,在这种情况下它不能被转换。 – tradeJmark 2018-02-27 19:33:53

回答

1

This MSDN example意味着您错误地使用AcquireConnection

+0

那些只是在我的电脑上返回null :( – 2012-09-25 13:51:10

1

您需要使用托管连接提供程序。

1

如果你坚持使用OLEDB连接,您不能使用AcquireConnection,但你可以提取连接字符串,然后用它来创建一个OLEDB连接:

string connstr = Dts.Connections["my_OLEDB_connection"].ConnectionString; 
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(connstr); 

这可能不是如果连接字符串是通过某种表达式创建的,则工作。