【发布时间】:2017-06-02 02:51:43
【问题描述】:
我一直在使用 SSIS 包,但目前遇到了这个问题。我一直在使用我在包变量中编写的连接字符串进行开发,该值通过表达式进入连接管理器。像这样:@[User::Connection]
它非常适合调试。因为我需要在脚本任务和脚本组件中调用一些存储过程,所以我只需调用 Package 变量作为与数据库的字符串连接。由于我是 ETL 世界的新手(不到一个月)并且我一直在做一些包(实际上是 6 个),所以最近我读到我应该将我的 ConnectionString 保存在一个 xml 文件中并存储诸如用户之类的东西,那里的密码(因为生产服务器可能有不同的用户帐户,如提到的here和here)
现在,我已经尝试按照它所说的去做,但它对我不起作用。所以我创建了一个新的 SSIS 包进行测试,它包含一个脚本任务和它调用一个简单的存储过程。包 Configuration 仅包含 Connection Manager 中的 ConnectionString 属性,它看起来像这样:
<?xml version="1.0" ?>
- <DTSConfiguration>
- <DTSConfigurationHeading>
<DTSConfigurationFileInfo GeneratedBy="JohnSmith" GeneratedFromPackageName="Package" GeneratedFromPackageID="{2C421533-C76C-4583-841C-367C50DB61C1}" GeneratedDate="17/01/2017 --:--:-- p.m." />
</DTSConfigurationHeading>
- <Configuration ConfiguredType="Property" Path="\Package.Connections[OLEDB_CONNECTION].Properties[ConnectionString]" ValueType="String">
<ConfiguredValue>Data Source=ServerName;User ID=UserName;Initial Catalog=DatabaseName;Provider=SQLNCLI10.1;Auto Translate=False;Application Name=SSIS-Package-{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}ServerName.DatabaseName.UserName;Use Encryption for Data=False;Password=abc123;</ConfiguredValue>
</Configuration>
</DTSConfiguration>
我在末尾添加了密码,正如开头的链接所建议的那样,并尝试在脚本任务中获取这样的连接字符串:
String cn = Dts.Connections["OLEDB_CONNECTION"].ConnectionString;
然后在存储过程中调用它,像这样:
using (OleDbConnection con = new OleDbConnection(cn))
{
using (OleDbCommand cmd = new OleDbCommand("dbo.usp_sgn_conseguirNumDoc", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@var_CODDOC", OleDbType.VarChar, 3).Value = "001";
cmd.Parameters.Add("@var_NUMDOC", OleDbType.BigInt).Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
result = Int64.Parse(cmd.Parameters["@var_NUMDOC"].Value.ToString());
}
}
但它在 con.Open() 中失败,所以当我检查 ConnectionString 时,它是相同的,但没有我写的 Password 值。就像它没有从 xml 配置文件中读取它一样。当我检查错误列表窗口中的消息选项卡时,我看到了:
<DTS:ConnectionManager>
<DTS:Property DTS:Name="DelayValidation">0</DTS:Property>
<DTS:Property DTS:Name="ObjectName">OLEDB_CONNECTION</DTS:Property>
<DTS:Property DTS:Name="DTSID">{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}</DTS:Property>
<DTS:Property DTS:Name="Description"></DTS:Property>
<DTS:Property DTS:Name="CreationName">OLEDB</DTS:Property><DTS:ObjectData><DTS:ConnectionManager>
<DTS:Property DTS:Name="Retain">0</DTS:Property><DTS:Password DTS:Name="Password" Sensitive="1"></DTS:Password>
<DTS:Property DTS:Name="ConnectionString">Data Source=ServerName;User ID=UserName;Initial Catalog=DatabaseName;Provider=SQLNCLI10.1;Auto Translate=False;Application Name=SSIS-Package-{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}ServerName.DatabaseName.UserName;Use Encryption for Data=False;</DTS:Property></DTS:ConnectionManager></DTS:ObjectData></DTS:ConnectionManager>
我不知道该怎么做,任何帮助将不胜感激
我使用 Visual Studio 2008 和 SQL Server 2008。
【问题讨论】:
-
你是否像这样将你的包链接到配置文件:technet.microsoft.com/en-us/library/ms140213(v=sql.105).aspx
-
@Nick.McDermaid 我做了,并且只从连接管理器链接了连接字符串属性
标签: c# sql-server sql-server-2008 ssis