我正在尝试使用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函数没有用户名和密码的参数。
谢谢,
发布于 2017-10-13 15:20:13
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);
}
}我们能做些什么?
发布于 2017-10-14 00:53:36
这里是EzAPI中连接管理器的源代码。基于此,EzSqlOleDbCM (您正在使用的)扩展了EzOleDbConnectionManager,而后者又扩展了EzConnectionManager
您在EzSqlOleDbCm上使用的是EzSqlOleDbCm方法;不幸的是,这是硬编码的,只能使用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和密码属性;因此您也可以使用这些属性指定用户名和密码。但是,如果您这样做,那么您就不能使用SetConnectionString方法;因为这是硬编码的使用Windows,这意味着您必须再次使用前面的选项覆盖它。
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的库,名为帕伽索斯;您可以找到这里。您可以查看源代码并重复使用它,或者按原样使用代码。现在,EzAPI和Pegasus都是SSIS对象模型API的包装器。因此,您可以直接使用SSIS;但是直接使用它会很痛苦,因为您将编写大量的锅炉板代码并重复您的代码。最好是针对官方API编写自己的包装器,或者使用类似于EzAPI或Pegasus之类的工具。
如果SSIS是您的日常工作,并且您根据某些模式创建了许多包,那么我建议您一定要考虑包自动化。开发和测试时间的节省是巨大的,巨大的和巨大的。如果您不愿意使用第三方库(如EzApi或飞马),我建议您查看这些库的源代码,然后滚动您自己的;或者Biml。
如果您需要任何关于软件包自动化的指导/意见,请告诉我。
https://stackoverflow.com/questions/46718958
复制相似问题