2010-02-17 3 views
3

У меня есть соединение OLEDB, настроенное в менеджерах соединений, и я хочу использовать его в SCRIPT. Сценарий должен вызывать сохраненный процесс, а затем создавать строки буфера. Я добавил подключение к соединениям, доступным для скрипта, и это мой код.Использование существующего соединения в компоненте скрипта (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

Пожалуйста, разместите все ошибки, которые вы получаете. –

+0

'conn = (SqlConnection) (Connections.Connection .AcquireConnection (null) как SqlConnection);' - Это избыточно. С помощью 'as' вы преобразуете возвращенный объект в' SqlConnection'. Затем вы передаете этот 'SqlConnection' в тип' SqlConnection', который он по определению уже есть, если он не равен нулю, и в этом случае он не может быть запущен в любом случае. – tradeJmark

ответ

1

This MSDN example следует, что вы используете AcquireConnection неправильно.

+0

Те, кто просто возвращает null на мой компьютер :( –

1

Необходимо использовать поставщика управляемого соединения.

3

Вы не можете подключить OLEDB-соединение к объекту SqlConnection. Вы должны использовать объект OleDbConnection. Смотрите пример - http://blogs.msdn.com/b/mattm/archive/2008/08/22/accessing-oledb-connection-managers-in-a-script.aspx

+0

Также ссылайтесь на это http://stackoverflow.com/questions/11867639/connect-to-sql-database-inside-script-task-in-ssis – Jabez

1

Если вы настаиваете на использовании соединения OLEDB, вы не можете использовать AcquireConnection, но вы можете извлечь строку подключения, а затем использовать его, чтобы создать соединение OLEDB:

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

Это не может работайте, если строка соединения создается с помощью какого-либо выражения.

Смежные вопросы