使用 WCF 服务模型的 Oracle 电子商务套件中的 ExecuteReader、ExecuteScalar 或 ExecuteNonQuery 操作
Oracle 电子商务适配器公开常规操作,例如 ExecuteNonQuery、 ExecuteReader 和 ExecuteScalar。 可以使用这些操作在 Oracle 电子商务套件上执行任何语句。 这些操作因语句的响应类型而异。 有关适配器如何支持这些操作的详细信息,请参阅 对 ExecuteNonQuery、ExecuteReader 和 ExecuteScalar 操作的支持。
本主题演示如何使用 WCF 服务模型通过 Oracle 电子商务适配器执行 ExecuteReader 操作。 可以按照本主题中所述的同一组过程来执行 ExecuteNonQuery 和 ExecuteScalar 操作。
关于本主题中使用的示例
本主题中的示例执行 ExecuteReader 操作以对MS_SAMPLE_EMPLOYEE接口表执行 SELECT 操作。 表是通过运行示例提供的脚本创建的。 有关示例的详细信息,请参阅 Oracle EBS 适配器的示例。 基于本主题的示例 ExecuteReader 也随 Oracle 电子商务适配器示例一起提供。
WCF 客户端类
下表列出了为使用 Oracle 电子商务适配器 (ExecuteNonQuery、ExecuteReader 或 ExecuteScalar) 调用泛型操作而生成的 WCF 客户端的名称。
Operations | WCF 客户端名称 |
---|---|
ExecuteNonQuery、ExecuteReader 或 ExecuteScalar | GenericOperation_Client |
用于调用泛型操作的方法签名
下表显示了公开用于调用泛型操作的方法的签名。
操作 | 方法签名 |
---|---|
ExecuteNonQuery | int ExecuteNonQuery (string Query, string[] OutputRefCursorNames, out System.Data.DataSet[] OutputRefCursors) |
ExecuteReader | System.Data.DataSet ExecuteReader (字符串查询) |
ExecuteScalar | string ExecuteScalar (string Query) |
例如,泛型操作方法的签名显示在以下代码片段中。
public partial class GenericOperation_Client : System.ServiceModel.ClientBase<GenericOperation_>, GenericOperation_ {
public int ExecuteNonQuery(string Query, string[] OutputRefCursorNames, out System.Data.DataSet[] OutputRefCursors);
public System.Data.DataSet ExecuteReader(string Query);
public string ExecuteScalar(string Query);
}
在此代码片段中,
GenericOperation_Client
是类的名称。 此类用于创建客户端以调用常规操作 ExecuteReader。public System.Data.DataSet ExecuteReader(string Query)
是调用对MS_SAMPLE_EMPLOYEE接口表执行 SELECT 语句的方法。
创建 WCF 客户端以调用 ExecuteReader 操作
使用 WCF 客户端在 Oracle 电子商务套件上执行操作所需的通用操作集涉及 使用 Oracle 电子商务套件适配器的 WCF 服务模型概述中所述的一组任务。 本部分介绍如何创建 WCF 客户端以调用 ExecuteReader 操作。
创建 WCF 客户端以调用 ExecuteReader 操作
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
为 ExecuteReader 泛型操作生成 WCF 客户端类。 使用“添加适配器服务引用”插件连接到 Oracle 电子商务套件时,可在根节点下执行此操作。 有关生成 WCF 客户端类的详细信息,请参阅 为 Oracle 电子商务套件解决方案项目生成 WCF 客户端或 WCF 服务协定。
重要
在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。
在解决方案资源管理器,添加对 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.OracleEBS
引用。打开 Program.cs 文件并添加以下命名空间:
Microsoft.Adapters.OracleEBS
System.ServiceModel
在 Program.cs 文件中,按照以下代码片段中所述创建客户端。
OracleEBSBinding binding = new OracleEBSBinding(); EndpointAddress address = new EndpointAddress("oracleebs://ebs-72-11"); GenericOperation_Client client = new GenericOperation_Client(binding, address);
在此代码片段中,
GenericOperation_Client
是在 OracleEBSBindingClient.cs 中定义的 WCF 客户端。 此文件由添加适配器服务引用插件生成。注意
在此代码片段中,在应用程序代码中显式指定绑定和终结点地址。 可以使用应用程序配置文件(app.config)中的这些值,这些值也由添加适配器服务引用插件生成。 有关指定客户端绑定的不同方法的详细信息,请参阅 为 Oracle E-Business Suite 配置客户端绑定。
设置客户端的凭据。
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
由于正在对接口表执行操作,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 OracleUserName、 OraclePassword 和 OracleEBSResponsibilityName 绑定属性。 有关应用程序上下文的详细信息,请参阅 设置应用程序上下文。
binding.OracleUserName = "myOracleEBSUserName"; binding.OraclePassword = "myOracleEBSPassword"; binding.OracleEBSResponsibilityName = "myOracleEBSResponsibility";
打开客户端,如以下代码片段中所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
调用 ExecuteReader 操作以对MS_SAMPLE_EMPLOYEE表执行 SELECT 操作。 在调用 ExecuteReader 操作之前,必须将 命名空间添加到
System.Data
代码中。string query = "SELECT * FROM MS_SAMPLE_EMPLOYEE"; DataSet ds = client.ExecuteReader(query); Console.WriteLine("Invoking the SELECT statement using ExecuteReader"); Console.WriteLine("*****************************************************"); foreach (DataTable tab in ds.Tables) { foreach (DataRow row in tab.Rows) { Console.WriteLine("The details of the employee are: "); for (int i = 0; i < tab.Columns.Count; i++) { Console.WriteLine(row[i]); } Console.WriteLine(); } } Console.WriteLine("*****************************************************"); Console.ReadLine();
关闭客户端,如以下代码片段中所述:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
生成项目,然后运行它。 MS_SAMPLE_EMPLOYEE表中的所有记录都显示在主机上。