ssis如何通过代码更新数据流源的sqlcommand

zaiai2003 2012-02-22 12:04:55
原因:安装系统后,无法通过sqlcommand来实现参数的使用。如果将代码设置为select * from t_table where column1 > ?无法识别参数。这个问题搞不定
解决方案:希望通过脚本组建或者数据流的事件脚本,通过脚本来进行字符串替换,实现参数的功能。

问题:如何在包的脚本组件中,通过代码引用已经定义的数据流源的sqlcommand属性,这样我就可以通过代码来实现参数查询的功能。或者在包的事件程序中,onPreExecute事件中处理这个任务。

知识缺陷:由于一直没有接触vb.net不知道如何通过代码来引用已有对象,成了我的痛。

希望不吝赐教!
...全文
187 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaiai2003 2012-03-31
  • 打赏
  • 举报
回复
感觉还是没有指出问题,很怀念【邹建】的回答问题方式。一般大众,还是一般的智慧,只有智者才能够指点。
mayuanf 2012-02-22
  • 打赏
  • 举报
回复
我现在的项目是从oracle extract数据,不过思想差不多。
用txt文件放置.sql的模板,然后用SSIS的vb或c# script去赋参数和调用.sql然后spool数据。
kingtiy 2012-02-22
  • 打赏
  • 举报
回复
参数无法识别是什么意思?
在参数那一栏选择这个参数的变量就可以了
mayuanf 2012-02-22
  • 打赏
  • 举报
回复

Imports System.Data.SqlClient
...
Public Class ScriptMain
Inherits UserComponent

Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection
Dim sqlCmd As SqlCommand
Dim sqlParam As SqlParameter

Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

connMgr = Me.Connections.MyADONETConnectionManager
sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)

End Sub

Public Overrides Sub PreExecute()

sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
"VALUES(@addressid, @city)", sqlConn)
sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
sqlCmd.Parameters.Add(sqlParam)
sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
sqlCmd.Parameters.Add(sqlParam)

End Sub

Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
With sqlCmd
.Parameters("@addressid").Value = Row.AddressID
.Parameters("@city").Value = Row.City
.ExecuteNonQuery()
End With
End Sub

Public Overrides Sub ReleaseConnections()

connMgr.ReleaseConnection(sqlConn)

End Sub

End Class
参考

Override the AcquireConnections method to connect to the external data source。例子里是ado.net,不过在
[code=VB.NET]
Dim cm As ConnectionManager
Dim cmParam As Wrapper.IDTSConnectionManagerDatabaseParameters90
Dim conn As OleDb.OleDbConnection

cm = Dts.Connections("oledb")
cmParam = CType(cm.InnerObject, Wrapper.IDTSConnectionManagerDatabaseParameters90)
conn = CType(cmParam.GetConnectionForSchema(), OleDb.OleDbConnection)

描述了如何获取oledb的connection

然后override PreExecute 可以创建或配置sqlcommand

[/code]
zaiai2003 2012-02-22
  • 打赏
  • 举报
回复
IO.StreamReader 这个是个什么对象,能否引用已经定义好的数据流源。我想您可以解决我的问题。
我在SSIS中已经定义了数据流任务,然后有一个数据流源,oleDB类型。有一个sql语句,在这个数据流源对象的sqlcommand属性中,如何在代码中引用这个数据流源的sqlcommand属性!????
mayuanf 2012-02-22
  • 打赏
  • 举报
回复

Dim sqlTerm As String
Dim sr As IO.StreamReader
Dim sw As IO.StreamWriter
Dim content As String
Dim qryPath As String
Dim batPath As String

'Set the standard template location, which will be overwritten with the final location
qryPath = "your query file path"
batPath = "your batch file path"

' Build a sql query file per request
sqlTerm = " AND EXTRACT(Year from OTINSTALL.INSTALL_DATE) = " + CStr(y) + " AND EXTRACT(MONTH from OTINSTALL.INSTALL_DATE) = " + CStr(m)

sr = New IO.StreamReader(String.Format("{0}.sql", qryPath))
content = sr.ReadToEnd()
content = content + sqlTerm
sr.Close()

qryPath = Regex.Replace(qryPath, "Templates", "Queries")
sw = New IO.StreamWriter(String.Format("{0}{1}.sql", qryPath, timeSlice))
sw.Write(content)
sw.Close()


就把txt的内容当作string来看待,改replace就replace改append就append
zaiai2003 2012-02-22
  • 打赏
  • 举报
回复
现在的问题就是不知道如何通过vb来调用txt文件
请明确!

6,129

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧