当前位置: 代码迷 >> Sql Server >> SSIS 数据流中脚本组件应用有关问题
  详细解决方案

SSIS 数据流中脚本组件应用有关问题

热度:20   发布时间:2016-04-27 14:58:39.0
SSIS 数据流中脚本组件应用问题
/* Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
  string st = string.Empty;
  SqlConnection cnn;
  IDTSConnectionManager100 cnManager;
  SqlCommand cmd = new SqlCommand();
   
  public override void PreExecute()
  {
  base.PreExecute();
  //get conn;
  cnManager = base.Connections.连接;
  cnn = (SqlConnection)cnManager.AcquireConnection(null);
   
  }

  public override void PostExecute()
  {
  base.PostExecute();
  }

  public override void 输入0_ProcessInputRow(输入0Buffer Row)
  {
  cnManager = base.Connections.连接;
  cnn = (SqlConnection)cnManager.AcquireConnection(null);
   
  string sqlstring = "select distinct ipid from p_ip where '" + Row.UserIp + "' between start_t and end_t";
  DataTable dt = new DataTable();
  cmd.Connection = cnn;
  cmd.CommandText = sqlstring;
  cmd.CommandType = CommandType.Text;

  SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  adapter.Fill(dt);

  if (dt.Rows.Count == 0)
  Row.ipid = -100;
  else
  Row.ipid = int.Parse(dt.Rows[0]["ipid"].ToString());
   
   
   


  }
}

报错:无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“System.Data.SqlClient.SqlConnection”。表示 COM 组件的类型实例不能强制转换为不表示 COM 组件的类型;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。

高手帮忙解释下,小弟不胜感激!


------解决方案--------------------
这里的脚本,有很多限制的,很多东西都不可用,我一般只是用来处理一些字符什么的,

同样期待高手
------解决方案--------------------
看下 base.Connections.连接 这个连接你所配的类型能不能转成System.Data.SqlClient.SqlConnection 不是所有的都可以转的
------解决方案--------------------
试试这个行不行
C# code
...using System.Data.OleDb;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]public class ScriptMain : UserComponent{    private SqlConnection sqlCon;    private SqlCommand sqlCmd;    private SqlDataReader sqlReader;    public override void AcquireConnections(object Transaction)    {        sqlCon = new SqlConnection("这里替换成sqlserver连接字符串");        sqlCmd = new SqlCommand();        sqlCon.Open();        sqlCmd.Connection = sqlCon;    }    public override void PreExecute()    {        base.PreExecute();        /*          Add your code here for preprocessing or remove if not needed        */            }    public override void PostExecute()    {        base.PostExecute();        /*          Add your code here for postprocessing or remove if not needed          You can set read/write variables here, for example:          Variables.MyIntVar = 100        */        sqlCon.Close();    }    public override void source_ProcessInputRow(sourceBuffer Row)    {        /*          Add your code here        */            }}
  相关解决方案