我正在尝试使用EzAPI 2012创建一个SSIS包。我发现的模板和教程工作正常,但我无法找到任何关于使用SQL身份验证创建与OLEDB的连接的内容(用户名和密码)。这是我用来创建OLEDB连接的代码的一部分:
// Creating a connection to the database:
EzSqlOleDbCM srcConn = Activator.CreateInstance(typeof(EzSqlOleDbCM), new object[] { package }) as EzSqlOleDbCM;
srcConn.SetConnectionString(_CL_SourceServerName, _CL_SourceDBName);
srcConn.Name = "SourceDB";
EzSqlOleDbCM destConn = Activator.CreateInstance(typeof(EzSqlOleDbCM), new object[] { package }) as EzSqlOleDbCM;
destConn.SetConnectionString(_CL_DestServerName, _CL_DestDBName);
destConn.Name = "DestDB";
名称与" CL "一开始是变量。 EzSqlOleDbCM函数没有用户名和密码的参数。
谢谢,
答案 0 :(得分:0)
EzApi非常适合它解决的问题。这是很多不足的案例之一。您可以在源代码中看到他们对连接管理器进行硬编码以使用SSPI
/// <summary>
/// OleDb connection manager for SQL Server
/// </summary>
public class EzSqlOleDbCM : EzOleDbConnectionManager
{
public EzSqlOleDbCM(EzPackage parent) : base(parent) { }
public EzSqlOleDbCM(EzPackage parent, ConnectionManager c) : base(parent, c) { }
public EzSqlOleDbCM(EzPackage parent, string name) : base(parent, name) { }
public EzSqlOleDbCM(EzProject parentProject, string streamName) : base(parentProject, streamName) { }
public EzSqlOleDbCM(EzProject parentProject, string streamName, string name) : base(parentProject, streamName, name) { }
public void SetConnectionString(string server, string db)
{
ConnectionString = string.Format("provider=sqlncli11;integrated security=sspi;database={0};server={1};OLE DB Services=-2;Auto Translate=False;Connect Timeout=300;",
db, server);
}
}
可以做些什么?
答案 1 :(得分:0)
Here是EzAPI中连接管理器的源代码。基于此,EzSqlOleDbCM(您正在使用的)扩展了EzOleDbConnectionManager,后者又扩展了EzConnectionManager
您在EzSqlOleDbCm上使用SetConnectionString方法;不幸的是,它被硬编码为仅使用Windows身份验证。
以下是我会尝试的选项:
选项1:
EzConnectionManager公开一个名为ConnectionString的属性,并有一个setter;因此,您可以使用此属性直接分配连接字符串(使用您的用户名和密码)(并避免使用SetConnectionString方法调用)。例如:
srcConn.ConnectionString = @"Provider=my_oledb_provider;Data Source=myServerAddress;Initial Catalog=myDataBase; User Id=myUsername;Password=myPassword";
选项2:
此外,EzOleDbConnectionManager公开UserName和Password属性;所以你也可以使用这些属性来指定你的用户名和密码。但是,如果你这样,那么就不能使用SetConnectionString方法;使用Windows Auth进行硬编码的cos,这意味着您必须使用之前的选项再次覆盖它。
srcConn.UserName = "my_user_name";
srcConn.Password = "my_password";
选项3:
如果您在项目中直接使用EzAPI源代码,我会添加另一个名为SetConnectionString的便捷方法,但该方法接受用户名和密码。
public void SetSqlAuthConnectionString(string server, string db, string user, string pwd)
{
// Notice that we are just setting the ConnectionString property.
ConnectionString =string.Format("Provider=my_oledb_provider;Data Source={0};Initial Catalog={1};User Id={2};Password={3}", server, db, user, pwd
};
然后您可以使用如下:
srcConn.SetSqlAuthConnectionString(myServer, myDB, userName, password);
或者,在更高的层次上:我也会给Biml一个机会。如果这对您的需求很好,也很好。另外,我写了一个类似于EzApi的库Pegasus;您可以找到here。您可以查看源代码并重新使用它或按原样使用代码。现在,EzAPI和Pegasus都是SSIS对象模型API的包装器。因此,您可以直接使用SSIS API;但直接使用它会很痛苦,因为你会写很多样板代码并重复你的代码。你最好在官方API上编写自己的包装器;或使用像EzAPI或Pegasus这样的东西。
如果SSIS是你的日常工作,并且你根据某些模式创建了很多包,那么我建议你一定要考虑包自动化。节省的开发和测试时间巨大且巨大且巨大。如果您不愿意使用第三方库(如EzApi或Pegasus),我建议您查看这些库的源代码并自行滚动;或者Biml。
如果您需要有关包装自动化的任何指导/意见,请与我们联系。