Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有SQL身份验证的EzAPI OLEDB连接_C#_Ssis_Programmatically_Ezapi - Fatal编程技术网

C# 带有SQL身份验证的EzAPI 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

我正在尝试使用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函数没有用户名和密码参数

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似乎被放弃了

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似乎被放弃了
是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公开用户名和密码属性;因此,您还可以使用这些属性指定用户名和密码。但是,如果您这样做,则无法使用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是您的日常工作,并且您根据一些模式创建了许多包,那么我建议您一定要研究包自动化。开发和测试时间的节省是巨大的