c# GUI访问Web服务
本文关键字:服务 Web 访问 GUI | 更新日期: 2023-09-27 17:50:14
我有一个在本地服务器上运行的web服务。在它我有一个方法,返回一个json表示的Oracle数据库查询,这是从一个List<Dictionary<String, String>>
对象转换。
我有一个需要相同数据的GUI程序。如果我试图将查询移动到GUI,我必须要求用户在那里的系统上安装Oracle,根据我得到以下错误后阅读的内容:
无法加载文件或程序集。DataAccess, Version =…"
我不想让我的用户在他们的系统上安装Oracle。
我的解决方案是只访问运行在web服务上的现有逻辑。. NET 3.5 WebForms App)。我编写了另一个web服务,它返回List<Dictionary<String, String>>
对象,而不是经历将其转换为json对象的麻烦。
我如何从GUI得到这个?
在我最初的搜索中,我发现了一些链接,说这是可能的,或者有些地方他们返回json格式的对象。但是没有我想要的东西
帮忙吗?
不太明白你的意思,但是web api呢?这是我用人力资源模式来做的。所以创建一个web API项目。然后打开tools库包管理器,添加oracle驱动程序。输入Install-Package odp.net.managed
,然后在你的web配置中配置你的连接字符串,这里是我的,只是我本地机器上的一个数据库,所以我会留下密码。
<add name="hr" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=mydatabase))); User Id=hr; Password=fdsafdsafafads;" providerName="oracle.manaagedatacess.client" />
然后创建你的模型/s,这里是一个雇员
public class employee{
public int employee_id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string email { get; set; }
public string phone_number { get; set; }
public DateTime hire_date { get; set; }
public string job_id { get; set; }
public decimal? salary { get; set; }
public decimal? commission_pct { get; set; }
public int? manager_id { get; set; }
public int? department_id { get; set; }
}
然后我做了一个存储库(如果你使用实体框架,而不是ado,你不需要这些步骤,但我通常不使用实体框架)
namespace webApiOracle.Models
{
internal class employeeRepository
{
internal static IEnumerable<employee> getAllEmployees()
{
List<employee> employees = new List<employee>();
string sql = "SELECT * from employees";
OracleDataReader rdr = dataHelper.getrdr(sql);
if (rdr.HasRows)
{
while (rdr.Read())
{
employee emp = getEmployee(rdr);
employees.Add(emp);
}
rdr.Close();
}
return employees;
}
internal static employee getEmployee(int id)
{
employee emp = null;
string sql = "SELECT * from employees where employee_id = " + id;
OracleDataReader rdr = dataHelper.getrdr(sql);
if (rdr.HasRows)
{
while (rdr.Read())
{
emp = getEmployee(rdr);
}
rdr.Close();
}
return emp;
}
internal static employee add(employee emp)
{
OracleDataAdapter oda = new OracleDataAdapter();
string sql = "Insert into employees ";
sql = sql + "(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID) ";
sql = sql + "values (EMPLOYEES_SEQ.NEXTVAL,:first_name,:last_name,:email,:phone_number,sysdate,:job_id,:salary,:commission_pct,:manager_id,:department_id)";
OracleConnection cn =
new OracleConnection(
ConfigurationManager.ConnectionStrings
["hr"].ConnectionString);
cn.Open();
oda.InsertCommand = new OracleCommand(sql, cn);
oda.InsertCommand.BindByName = true;
oda.InsertCommand.Parameters.Add(":first_name", emp.first_name);
oda.InsertCommand.Parameters.Add(":last_name", emp.last_name);
oda.InsertCommand.Parameters.Add(":email", emp.email);
oda.InsertCommand.Parameters.Add(":phone_number", emp.phone_number);
oda.InsertCommand.Parameters.Add(":job_id", emp.job_id);
oda.InsertCommand.Parameters.Add(":salary", emp.salary);
oda.InsertCommand.Parameters.Add(":commission_pct", emp.commission_pct);
oda.InsertCommand.Parameters.Add(":manager_id", emp.manager_id);
oda.InsertCommand.Parameters.Add(":department_id", emp.department_id);
int count = oda.InsertCommand.ExecuteNonQuery();
sql = "SELECT * from employees where employee_id = EMPLOYEES_SEQ.CURRVAL";
OracleDataReader rdr = dataHelper.getrdr(sql);
if (rdr.HasRows)
{
while (rdr.Read())
{
emp = getEmployee(rdr);
}
rdr.Close();
}
return emp;
}
internal static IEnumerable<employee> getEmployeesByVal(string key, string value)
{
List<employee> employees = new List<employee>();
string sql = "SELECT * from employees where " + key + " = '" + value + "'";
OracleDataReader rdr = dataHelper.getrdr(sql);
if (rdr.HasRows)
{
while (rdr.Read())
{
employee emp = getEmployee(rdr);
employees.Add(emp);
}
rdr.Close();
}
return employees;
}
private static employee getEmployee(OracleDataReader rdr)
{
employee emp = new employee
{
employee_id = rdr.GetInt32(rdr.GetOrdinal("EMPLOYEE_ID")),
first_name = rdr["FIRST_NAME"].ToString(),
last_name = rdr["LAST_NAME"].ToString(),
email = rdr["EMAIL"].ToString(),
phone_number = rdr["PHONE_NUMBER"].ToString(),
hire_date = rdr.GetDateTime(rdr.GetOrdinal("HIRE_DATE")),
job_id = rdr["JOB_ID"].ToString(),
salary = dataHelper.decimalnullable(rdr, "SALARY"),
commission_pct = dataHelper.decimalnullable(rdr, "COMMISSION_PCT"),
manager_id = dataHelper.intnullable(rdr, "MANAGER_ID"),
department_id = dataHelper.intnullable(rdr, "DEPARTMENT_ID")
};
return emp;
}
}
}
然后制作一个web API控制器到控制器文件夹右键单击并选择空的web API控制器。
public class employeeController : ApiController
{
public IEnumerable<employee> GetAllEmployees()
{
return employeeRepository.getAllEmployees();
}
//[Route("api/employee/{id:int}")]
public employee getEmployee(int id) {
return employeeRepository.getEmployee(id);
}
[Route("api/employee/{key}/{value}")]
public IEnumerable<employee> getEmployeesByVal(string key, string value) {
return employeeRepository.getEmployeesByVal(key, value);
}
[HttpPost]
public employee add(employee emp)
{
return employeeRepository.add(emp);
}
}
}
然后当你需要json数据时调用url如果我想要所有员工,url是/api/employee如果你只想要一个员工,id为100的url是/api/employee/100如果你想要姓king的员工,id为/api/employee/last_name/king
有很多web API的例子,如果你想看的话,还有一些免费的电子书。