运行 WCF 服务中的 Oracle 查询
Run Oracle Query in WCF Service
我正在尝试 运行 直接从我的 WCF 服务查询 Oracle 数据库并 return 结果,但似乎可以查询的代码 return结果导致 winform 程序没有为 wcf 服务做同样的事情。 我在 conn.Open 和 cmd 的代码中发现了几个错误。说它们是一个字段但像类型一样使用...我想我的代码可能放在错误的位置或容器中所以我尝试将它包装在 class 中似乎也没有用。出了什么问题?
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
[OperationContract]
string oradb = "Data Source=cecc-db1;User Id=dcsi;Password=dcsi;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select t2.meternumber, t1.blinkdate, t1.blinkcount from (select * from cecc_processed_blinks where trunc(blinkdate) between to_date('01-may-15', 'dd-mon-yy') and to_date('08-may-15', 'dd-mon-yy')) t1 left join meteraccts t2 on t1.serialnumber = t2.serialnumber order by t1.blinkdate desc";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
//TODO display the results...
conn.Dispose();
}
我相信,以下就是您要找的。
要创建 wcf 服务,首先定义一个契约(包含您需要的所有操作签名),然后使用您的实现来实现该契约。
详情请参考Walkthrough: Creating and Accessing WCF Services
接口(IMyService.cs):
namespace WcfServiceLibrary
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
List<string> GetMeterBlinkData();
}
}
接口实现(MyService.cs):
namespace WcfServiceLibrary
{
public class MyService: IMyService
{
public List<string> GetMeterBlinkData()
{
List<string> result = new List<string>();
string oradb = "Data Source=cecc-db1;User Id=dcsi;Password=dcsi;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select t2.meternumber, t1.blinkdate, t1.blinkcount from (select * from cecc_processed_blinks where trunc(blinkdate) between to_date('01-may-15', 'dd-mon-yy') and to_date('08-may-15', 'dd-mon-yy')) t1 left join meteraccts t2 on t1.serialnumber = t2.serialnumber order by t1.blinkdate desc";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
//TODO loop through results and fill the results object
conn.Dispose();
return result;
}
}
}
我正在尝试 运行 直接从我的 WCF 服务查询 Oracle 数据库并 return 结果,但似乎可以查询的代码 return结果导致 winform 程序没有为 wcf 服务做同样的事情。 我在 conn.Open 和 cmd 的代码中发现了几个错误。说它们是一个字段但像类型一样使用...我想我的代码可能放在错误的位置或容器中所以我尝试将它包装在 class 中似乎也没有用。出了什么问题?
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
[OperationContract]
string oradb = "Data Source=cecc-db1;User Id=dcsi;Password=dcsi;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select t2.meternumber, t1.blinkdate, t1.blinkcount from (select * from cecc_processed_blinks where trunc(blinkdate) between to_date('01-may-15', 'dd-mon-yy') and to_date('08-may-15', 'dd-mon-yy')) t1 left join meteraccts t2 on t1.serialnumber = t2.serialnumber order by t1.blinkdate desc";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
//TODO display the results...
conn.Dispose();
}
我相信,以下就是您要找的。 要创建 wcf 服务,首先定义一个契约(包含您需要的所有操作签名),然后使用您的实现来实现该契约。
详情请参考Walkthrough: Creating and Accessing WCF Services
接口(IMyService.cs):
namespace WcfServiceLibrary
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
List<string> GetMeterBlinkData();
}
}
接口实现(MyService.cs):
namespace WcfServiceLibrary
{
public class MyService: IMyService
{
public List<string> GetMeterBlinkData()
{
List<string> result = new List<string>();
string oradb = "Data Source=cecc-db1;User Id=dcsi;Password=dcsi;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select t2.meternumber, t1.blinkdate, t1.blinkcount from (select * from cecc_processed_blinks where trunc(blinkdate) between to_date('01-may-15', 'dd-mon-yy') and to_date('08-may-15', 'dd-mon-yy')) t1 left join meteraccts t2 on t1.serialnumber = t2.serialnumber order by t1.blinkdate desc";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
//TODO loop through results and fill the results object
conn.Dispose();
return result;
}
}
}