C# 带有SQL身份验证的EzAPI OLEDB连接
我正在尝试使用EzAPI 2012创建SSIS包。我找到的模板和教程可以正常工作,但我找不到任何关于使用SQL身份验证(用户名和密码)创建OLEDB连接的内容。下面是我用来创建OLEDB连接的部分代码:C# 带有SQL身份验证的EzAPI OLEDB连接,c#,ssis,programmatically,ezapi,C#,Ssis,Programmatically,Ezapi,我正在尝试使用EzAPI 2012创建SSIS包。我找到的模板和教程可以正常工作,但我找不到任何关于使用SQL身份验证(用户名和密码)创建OLEDB连接的内容。下面是我用来创建OLEDB连接的部分代码: // Creating a connection to the database: EzSqlOleDbCM srcConn = Activator.CreateInstance(typeof(EzSqlOleDbCM), new object[] { package }) as EzSqlOl
// 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函数没有用户名和密码参数
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
};
谢谢,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);
}
}
//
///用于SQL Server的OleDb连接管理器
///
公共类EzSqlOleDbCM:EzOleDbConnectionManager
{
公共EzSqlOleDbCM(EzPackage父级):基(父级){}
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(字符串服务器,字符串数据库)
{
ConnectionString=string.Format(“提供程序=sqlncli11;集成安全性=sspi;数据库={0};服务器={1};OLE DB服务=-2;自动转换=False;连接超时=300;”,
数据库(服务器);
}
}
可以做些什么
- 修改源代码以适应用户ID和密码
- 在EzApi中尽可能多地执行操作,然后恢复到使用基本SSIS对象模型-请参阅部分,但由于这是连接管理器,因此基本上就是所有内容
- 我不认为您可以通过向连接管理器本身添加表达式来伪装自己,因为当它在开发/对象创建期间尝试设置元数据时,表达式还不会处于活动状态
- 放弃吧,我知道我已经放弃了。我发现在SSIS包的编程创建中使用SSIS要容易得多。它是受支持的,而EzAPI似乎被放弃了
/// <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);
}
}
//
///用于SQL Server的OleDb连接管理器
///
公共类EzSqlOleDbCM:EzOleDbConnectionManager
{
公共EzSqlOleDbCM(EzPackage父级):基(父级){}
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(字符串服务器,字符串数据库)
{
ConnectionString=string.Format(“提供程序=sqlncli11;集成安全性=sspi;数据库={0};服务器={1};OLE DB服务=-2;自动转换=False;连接超时=300;”,
数据库(服务器);
}
}
可以做些什么
- 修改源代码以适应用户ID和密码
- 在EzApi中尽可能多地执行操作,然后恢复到使用基本SSIS对象模型-请参阅部分,但由于这是连接管理器,因此基本上就是所有内容
- 我不认为您可以通过向连接管理器本身添加表达式来伪装自己,因为当它在开发/对象创建期间尝试设置元数据时,表达式还不会处于活动状态
- 放弃吧,我知道我已经放弃了。我发现在SSIS包的编程创建中使用SSIS要容易得多。它是受支持的,而EzAPI似乎被放弃了
srcConn.ConnectionString = @"Provider=my_oledb_provider;Data Source=myServerAddress;Initial Catalog=myDataBase; User Id=myUsername;Password=myPassword";
备选案文2:
此外,EzOleDbConnectionManager公开用户名和密码属性;因此,您还可以使用这些属性指定用户名和密码。但是,如果您这样做,则无法使用SetConnectionString方法;因为它被硬编码为使用Windows Auth,这意味着您必须使用“上一个”选项再次覆盖它
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;但是直接使用它将是一种痛苦,因为您将编写大量的锅炉板代码并重复您的代码。您最好根据官方API编写自己的包装器;或者使用EzAPI或Pegasus之类的东西
如果SSIS是您的日常工作,并且您根据一些模式创建了许多包,那么我建议您一定要研究包自动化。开发和测试时间的节省是巨大的