我使用OLE DB 目标 组件,当有时间字段,老给报 TIME OUT OF A range 等字祥错误,我试着把日期转换成很多格式类型,都出现错误,
当使用old db 命令 时,有时更新 它会也报 多步错误, 整死我了,最后我打算用脚本来组件,使用目标.
客户一听,说不行,如果测通的连路了,也不行,得重做。真愁人。 这该死的DB2,为什么不让用脚本组件,客户一听,就反对,这是为什么呢?
大家对DB2有什么好招不。注意OLEDB参数要用?
下面贴出我的DB2脚本更新代码
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Data.OleDb;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
OleDbConnection con;
OleDbCommand old;
OleDbParameter one, two, name, date;
public override void PreExecute()
{
//连接数据字符串
/*
Data Source=issuser-PC;User ID=db2admin;Password=110;
* Initial Catalog=SAMPLE;Connect Timeout=60000;
* Provider=DB2OLEDB;Host CCSID=1208;PC Code Page=1381;
* Network Address=issuser-PC;Network Port=50000;
* Package Collection=ISSUSER;Default Schema=ISSUSER;Process Binary as Character=True;
* */
con = new OleDbConnection(Variables.SQL.ToString()); //我把数据连接的字符放到SQL变量中去了
con.Open();
old = new OleDbCommand();
old.Connection = con;
old.CommandText = "INSERT INTO ISSUSER.TEST(NUM1,RQ,NUM2 ,NAME) values(?,?,?,?)";
one = new OleDbParameter("@NUM1", OleDbType.Integer);
old.Parameters.Add(one);
date = new OleDbParameter("@RQ", OleDbType.DBTimeStamp);
old.Parameters.Add(date);
two = new OleDbParameter("@NUM2", OleDbType.Integer);
old.Parameters.Add(two);
name = new OleDbParameter("@NAME", OleDbType.VarChar);
old.Parameters.Add(name);
}
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
*/
con.Close();
}
public override void 输入0_ProcessInputRow(输入0Buffer Row)
{
old.Parameters["@NUM1"].Value = Row.one;
old.Parameters["@RQ"].Value = Row.rq;
old.Parameters["@NUM2"].Value = Row.two;
old.Parameters["@NAME"].Value = Row.name;
old.ExecuteNonQuery();
/*
Add your code here
*/
}
}