2016-03-23 1 views
0

私はSSISを使用してXMLフィードを読み込み、シュレッドして保存しています。それはすべて動作します。ただし、フィードで参照される画像もDBに保存する必要があります。これは新しいSSISパッケージでこれまで行ってきました。SSISを使用してウェブイメージを取得してvarbinary(max)に挿入する方法

画像URLのADOレコードセットを取得するためにSQLを使用するタスク私は適切な変数
から画像URLを読ん
               :
       スクリプトタスクを:含まForeachループコンテナにレコードセット
使用               は私が
               は、私は、オブジェクトSSIS変数
        SQL実行タスクに画像データを保存し、そのURLから画像データをダウンロードするためにWebクライアントを使用しますオブジェクト変数をVARBINARY(MAX)フィールドに挿入したい

この最後のステップですh私はいくつかの異なるSSISコンポーネントを使用しようとしました!)それは私を倒しているように見えますが、2日間は検索しましたが、同じことをしている人は見つかりませんでした。

insert into [ATOMimagedata] select @[User::entryid] , @[User::mcid], @[User::NCImgURL], null, @[User::NCImgData] 

が、それはSQLを受け入れないだろうと私はまた、パラメータにすべての変数をマッピングし、使用して試してみました:

insert into [ATOMimagedata] values(?, ?, ?, null, ?) 

が、私を、私はこのSQLを使用してみましたがSQL実行タスクを使用します画像データ変数パラメータに使用する適切なデータ型を見つけることができません。

要約すると、イメージデータを含め、各反復ですべてのSSIS変数を持つループがあります。 テーブルに挿入するにはどうすればいいですか?イメージ変数をロードするVBなどのコードをもっと表示することもできますが、バックグラウンドを提供する以外には最終的なハードルにはあま​​り役立たないと思います。

+0

[この質問](http:// stackoverflow。com/questions/23893914/ssis-foreach-loop-map-image-variable-to-ssis-type)は役に立ちますか? –

答えて

0

OK、それで、寝てからは、画像/オブジェクトのデータ(他のタスクに画像データを渡す)のデータタイピングなどが解決策を見つけるのにちょっと面倒だったとの結論に達しました。おそらく解決策はありません(誰もこれまでのところ誰も出てこなかった)。

Sooo、電球、doh、どうしていいですかVB Scriptから直接DBにデータを書き込みますか?

Public Sub Main() 

    Dim sqlConn As System.Data.SqlClient.SqlConnection 
    Dim sqlComm As System.Data.SqlClient.SqlCommand 
    Dim sins As String 
    Dim tmpURL As String 
    Dim tmpImg As Object 
    Dim eid As Long 
    Dim mid As Long 

    tmpURL = CStr(Me.Dts.Variables("NCImgURL").Value) 
    Using WC As New System.Net.WebClient() 
     WC.Encoding = System.Text.Encoding.UTF8 
     tmpImg = WC.DownloadData(tmpURL) 
     'Me.Dts.Variables("NCImgData").Value = tmpImg 
     eid = CLng(Me.Dts.Variables("entryid").Value) 
     mid = CLng(Me.Dts.Variables("mcid").Value) 
     'now try to write the image 
     sins = "insert into [ATOMimagedata]([entry_Id],[mediacontent_Id],[orgurl],[newurl],[img])" 
     sins = sins + " values(" + CStr(eid) + "," + CStr(mid) + ",'" + tmpURL + "',null, @IMG)" 

     sqlConn = DirectCast(Dts.Connections("LocalADO").AcquireConnection(Dts.Transaction), SqlClient.SqlConnection) 
     sqlComm = New System.Data.SqlClient.SqlCommand(sins, sqlConn) 
     sqlComm.Parameters.Add("@IMG", SqlDbType.Image) 
     sqlComm.Parameters("@IMG").Value = tmpImg 

     sqlComm.ExecuteNonQuery() 
    End Using 

    Dts.TaskResult = ScriptResults.Success 

End Sub 

だから、最後に、それは簡単だったが、私は無駄:だからここ

は他のケースの誰で私のコードは、あなたが右のタックを取ると、実際には、簡単に解決されているのと同じ不満を持っています私は無意識のうちに自分を閉じ込めていたボックスの外にあると思っていました。それがここの最大の教訓です!

関連する問題