我有一个SSIS包。我设计了一个包含标签,文本框和按钮的窗体,用于调用ssis。但我被困在一个场景中。 就像假设我在ssis中有5个变量,其中一个变量名称表示帐号需要从windows表单文本框中获取。
我的文本框代码是
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox objTextBox = (TextBox)sender;
string theText = objTextBox.Text;
string pkgLocation;
Package pkg = null;
Microsoft.SqlServer.Dts.Runtime.Application app;
DTSExecResult pkgResults;
Microsoft.SqlServer.Dts.Runtime.Variables myVars = pkg.Variables;
pkgLocation =
@"C:\Users\Visual Studio 2008\Projects" +
@"\Integration Services Project1\xyz.dtsx";
app = new Microsoft.SqlServer.Dts.Runtime.Application();
pkg = app.LoadPackage(pkgLocation, null);
myVars["Account_number"].Value = theText;
pkgResults = pkg.Execute(null, myVars,null,null,null);
}
这里的问题是,只需输入一个数字,然后在窗口中输入9,它就会开始执行包。我真的想让用户输入完整的account_Number并按下按钮运行包。
请告诉我代码中的问题或者我应该添加什么才能在点击按钮时获取account_number?
答案 0 :(得分:0)
您正在textBox1_TextChanged
事件中编写代码,这就是每次在文本框中键入字母或数字时代码执行的原因。每当您在文本框中键入内容TextChanged
时,都会触发事件。
相反,如果您希望代码在button_click
上执行,那么您应该在button_click
事件中编写代码。
在button_click上调用包。这样,每次在文本框中键入内容时都不会执行包。
修改强>
您的pkg
对象为空,表示您收到该错误的原因。加载包后移动Microsoft.SqlServer.Dts.Runtime.Variables myVars = pkg.Variables;
部分。
pkg = app.LoadPackage(pkgLocation, null);
Microsoft.SqlServer.Dts.Runtime.Variables myVars = pkg.Variables;
private void button_clicked(object sender, EventArgs e)
{
string theText = textBox1.Text;
string pkgLocation;
Package pkg = null;
Microsoft.SqlServer.Dts.Runtime.Application app;
DTSExecResult pkgResults;
pkgLocation =
@"C:\Users\Visual Studio 2008\Projects" +
@"\Integration Services Project1\xyz.dtsx";
app = new Microsoft.SqlServer.Dts.Runtime.Application();
pkg = app.LoadPackage(pkgLocation, null);
Microsoft.SqlServer.Dts.Runtime.Variables myVars = pkg.Variables;
myVars["Account_number"].Value = theText;
pkgResults = pkg.Execute(null, myVars,null,null,null);
}