Ssis 用于将记录插入数据库的C#或BIML代码

Ssis 用于将记录插入数据库的C#或BIML代码,ssis,biml,Ssis,Biml,我想在运行biml代码并且包已完成扩展时,将值插入数据库。使用biml或c#是否可以 我在数据库中创建了一个名为BIML扩展的表,我有test.BIML,它加载包test.dtsx。每当BIML扩展完成时,应在我的表中插入一条已完成扩展的记录 如果您有任何问题或需要任何其他信息,请告诉我 根据评论 我试过你的密码 string connectionString = "Data Source=hq-dev-sqldw01;Initial Catalog=IM_Stage;Integrated Se

我想在运行biml代码并且包已完成扩展时,将值插入数据库。使用biml或c#是否可以

我在数据库中创建了一个名为BIML扩展的表,我有test.BIML,它加载包test.dtsx。每当BIML扩展完成时,应在我的表中插入一条已完成扩展的记录

如果您有任何问题或需要任何其他信息,请告诉我

根据评论

我试过你的密码

string connectionString = "Data Source=hq-dev-sqldw01;Initial Catalog=IM_Stage;Integrated Security=SSPI;Provider=SQLNCLI11.1"; 
string SrcTablequery=@"INSERT INTO BIML_audit (audit_id,Package,audit_Logtime) VALUES (@audit_id, @Package,@audit_Logtime)"; 
DataTable dt = ExternalDataAccess.GetDataTable(connectionString,SrcTablequery);

它下面有一个错误,必须声明标量变量审核id。您能告诉我它背后的问题吗?

以最简单的形式,您的Biml脚本中会有这样的内容

// Define the connection string to our database 
string connectionStringSource = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Provider=SQLNCLI11.1";

// Define the query to be run after *ish* expansion
string SrcTableQuery = @"INSERT INTO dbo.MyTable (BuildDate) SELECT GETDATE()";

// Run our query, nothing populates the data table
DataTable dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
有很多不同的方法可以做到这一点——您可以构建自己的OLE/ADO连接管理器并使用类方法。您可以从Biml Connections集合中提取连接字符串(取决于在其中执行的层),等等

警告 根据产品的不同(BimlStudio与BimlExpress),可能会有一个后台过程来编译BimlScript,以确保所有元数据都已准备就绪,以便intellisense获取。您可能需要将该逻辑隐藏到一个非常Biml的文件中,以确保只有在准备好时才调用它。e、 g

<#@ template tier="999" #>
<#
// Define the connection string to our database 
string connectionStringSource = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Provider=SQLNCLI11.1";

// Define the query to be run after *ish* expansion
string SrcTableQuery = @"INSERT INTO dbo.MyTable (BuildDate) SELECT GETDATE()";
// Run our query, nothing populates the data table
DataTable dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
#>
由于未指定@audit\u id,因此出错。这很有意义-此查询指定它将提供三个变量,但不提供任何变量

选项1-懒惰的方式 最快的解决方法是以如下方式重新定义查询

string SrcTablequery=string.Format(@"INSERT INTO BIML_audit (audit_id,Package,audit_Logtime) VALUES ({0}, '{1}', '{2})'", 123, "MyPackageName", DateTime.Now); 
我使用字符串库的Format方法将实际值注入占位符。我假设audit_id是一个数字,另外两个是字符串,因此在那里,1和2周围有记号。您需要为审计id定义一个值,但我以123为例。如果我正在生成包,我的packageName可能会有一个变量,所以我也会在语句中引用它

选择2——更好的方法 将第三行替换为.NET库用法,正如您在上一页的heikofritz中看到的那样

1) 创建数据库连接 2) 开放连接 3) 创建命令对象并与连接关联 4) 指定您的语句(使用
作为序号标记,而不是命名参数,因为这是oledb) 5) 创建参数列表并与值关联


除了参考文献之外,还有很多很多例子,但这是第一次成功。只需忽略访问连接字符串并使用原始值。

我尝试了您的代码字符串connectionString=“Data Source=hq-dev-sqldw01;Initial Catalog=IM\u Stage;Integrated Security=SSPI;Provider=SQLNCLI11.1”;字符串SrcTablequery=@“插入BIML_审核(审核id、包、审核日志时间)值(@audit_id、@Package、@audit_日志时间)”;DataTable dt=ExternalDataAccess.GetDataTable(connectionString,SrcTablequery);它下面有一个错误必须声明标量变量audit\u id你能告诉我它背后的问题吗?谢谢你的帮助,我有上面的代码,但它有一些问题(@audit\u id)必须声明。你能告诉我如何修复它吗?我已经尝试了其他方法字符串connectionString=“数据源=HQ-DEV-SQLDW01;初始目录=IM_阶段;综合安全=SSPI;自动翻译=假;Provider=System.Data.SqlClient.SqlConnection,System.Data,版本=2.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089;“SqlConnection con=new-SqlConnection(connectionString);con.open();SqlCommand cmd=new-SqlCommand(“插入到audit.BIML_audit(Package,audit_Logtime)值('xyz',GETDATE())”,con);cmd.ExecuteNonQuery();上述代码生成以下错误“SqlConnection”不包含“open”的定义,并且找不到接受“SqlConnection”类型的第一个参数的扩展方法“open”(是否缺少using指令或程序集引用?C#中的方法区分大小写,因此
con.open
string SrcTablequery=string.Format(@"INSERT INTO BIML_audit (audit_id,Package,audit_Logtime) VALUES ({0}, '{1}', '{2})'", 123, "MyPackageName", DateTime.Now);