首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有SQL身份验证的EzAPI OLEDB连接

具有SQL身份验证的EzAPI OLEDB连接
EN

Stack Overflow用户
提问于 2017-10-12 21:10:27
回答 2查看 274关注 0票数 1

我正在尝试使用EzAPI 2012创建一个SSIS包。我找到的模板和教程工作得很好,但是我无法找到任何关于使用SQL身份验证(用户名和密码)创建OLEDB连接的内容。下面是我用来创建OLEDB连接的代码的一部分:

代码语言:javascript
复制
// 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函数没有用户名和密码的参数。

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2017-10-13 15:20:13

EzApi对于它解决的问题来说是很棒的。这是许多失败案例之一。您可以在源代码中看到他们硬编码连接管理器以使用SSPI。

代码语言:javascript
复制
/// <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);
    }
}

我们能做些什么?

  • 修改源代码以适应userids和密码
  • 在EzApi中尽可能多地执行,然后恢复到使用基本SSIS对象模型--请参阅LoadFromXML部分,但是由于这是连接管理器,这几乎就是一切。
  • 我不认为您可以通过将表达式添加到连接管理器本身来伪造它,因为当它试图在开发/对象创建过程中设置元数据时,表达式还不会是活动的。
  • 放弃EzAPI -我知道我已经放弃了。我发现使用比姆尔来编程创建SSIS包要容易得多。它是支持的,而EzAPI似乎被放弃了。
票数 0
EN

Stack Overflow用户

发布于 2017-10-14 00:53:36

这里是EzAPI中连接管理器的源代码。基于此,EzSqlOleDbCM (您正在使用的)扩展了EzOleDbConnectionManager,而后者又扩展了EzConnectionManager

您在EzSqlOleDbCm上使用的是EzSqlOleDbCm方法;不幸的是,这是硬编码的,只能使用Windows。

以下是我要尝试的选择:

备选案文1:

EzConnectionManager公开一个名为ConnectionString的属性,并具有一个setter;因此您可以使用该属性直接分配连接字符串(使用用户名和密码)(并避免SetConnectionString方法调用)。例如:

代码语言:javascript
复制
srcConn.ConnectionString = @"Provider=my_oledb_provider;Data Source=myServerAddress;Initial Catalog=myDataBase; User Id=myUsername;Password=myPassword";

备选案文2:

此外,EzOleDbConnectionManager公开了UserName和密码属性;因此您也可以使用这些属性指定用户名和密码。但是,如果您这样做,那么您就不能使用SetConnectionString方法;因为这是硬编码的使用Windows,这意味着您必须再次使用前面的选项覆盖它。

代码语言:javascript
复制
srcConn.UserName = "my_user_name";
srcConn.Password = "my_password";

备选方案3:

如果您在项目中直接使用EzAPI源代码,我将添加另一个名为SetConnectionString的方便方法,但它接受用户名和密码。

代码语言:javascript
复制
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
    };

然后,您可以如下所示:

代码语言:javascript
复制
srcConn.SetSqlAuthConnectionString(myServer, myDB, userName, password);

或者,在更高的层次上:我也会给Biml一个机会。如果这能很好地满足你的需要。此外,我还编写了一个类似于EzApi的库,名为帕伽索斯;您可以找到这里。您可以查看源代码并重复使用它,或者按原样使用代码。现在,EzAPI和Pegasus都是SSIS对象模型API的包装器。因此,您可以直接使用SSIS;但是直接使用它会很痛苦,因为您将编写大量的锅炉板代码并重复您的代码。最好是针对官方API编写自己的包装器,或者使用类似于EzAPI或Pegasus之类的工具。

如果SSIS是您的日常工作,并且您根据某些模式创建了许多包,那么我建议您一定要考虑包自动化。开发和测试时间的节省是巨大的,巨大的和巨大的。如果您不愿意使用第三方库(如EzApi或飞马),我建议您查看这些库的源代码,然后滚动您自己的;或者Biml。

如果您需要任何关于软件包自动化的指导/意见,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46718958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档