c# - 并非所有变量都绑定 Oracle REST Web API
问题描述
我得到并非所有变量都绑定。
这是我的代码的样子。
public IEnumerable<VaultService> Get(string Branch_Desg)
{
OracleConnection con = new OracleConnection(constr);
con.Open();
DataTable dt = new DataTable();
//string sql = "select * from wemadummyvaulttable where branch_desg = " + Branch_Desg + "";
string sql = "select BRANCH_ID ,BRANCH_NAME ,BRANCHID_NUMBER ,BRANCH_ACCOUNTNO ,BRANCH_DESG ,CURRENCY ,BRANCH_BALANCE from wemadummyvaulttable where Branch_Desg =" + ":Branch_Desg";
OracleDataAdapter da = new OracleDataAdapter(sql, con);
da.Fill(dt);
List<VaultService> vr = new List<Models.VaultService>(dt.Rows.Count);
if (dt.Rows.Count > 0)
{
foreach (DataRow vaultrecord in dt.Rows)
{
vr.Add(new ReadVaultBal(vaultrecord));
}
}
return vr;
}
出于某种原因,它不像它应该的那样工作。
屏幕截图如下所示:
现在我更新的代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WEMAVaultREST.Models;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
using System.Data;
namespace WEMAVaultREST.Controllers
{
public class VaultServiceController : ApiController
{
string constr = "User ID=system; Password=admin1234; Data Source=SAM;";
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
public string Get(int id)
{
return "value";
}
// GET api/<controller>/5
/* public VaultService Get(string Branch_Desg)
{
OracleConnection con = new OracleConnection(constr);
con.Open();
DataTable dt = new DataTable();
string sql = "select * from wemadummyvaulttable where branch_desg = '"+Branch_Desg+"'";
OracleDataAdapter da = new OracleDataAdapter(sql,con);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
return new ReadVaultBal(dt.Rows[0]);
}
throw new Exception("Account not found");
}*/
public IEnumerable<VaultService> Get(string Branch_Desg)
{
OracleConnection con = new OracleConnection(constr);
con.Open();
DataTable dt = new DataTable();
//string sql = "select * from wemadummyvaulttable where branch_desg = " + Branch_Desg + "";
string sql = "select BRANCH_ID ,BRANCH_NAME ,BRANCHID_NUMBER ,BRANCH_ACCOUNTNO ,BRANCH_DESG ,CURRENCY ,BRANCH_BALANCE from wemadummyvaulttable where Branch_Desg =" + ":Branch_Desg";
var command = new OracleCommand(sql, con);
command.Parameters.Add("Branch_Desg", Branch_Desg);
OracleDataAdapter da = new OracleDataAdapter(command);
da.Fill(dt);
List<VaultService> vr = new List<Models.VaultService>(dt.Rows.Count);
if (dt.Rows.Count > 0)
{
foreach (DataRow vaultrecord in dt.Rows)
{
vr.Add(new ReadVaultBal(vaultrecord));
}
}
return vr;
}
// POST api/<controller>
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}
这就是我现在所拥有的。如您所见,它在 Sqldeveloper 中返回。在代码中,它没有。我不知道从这里到哪里去。
如果我像这样运行 REST api:
http://localhost:7177/api/VaultService?Branch_Desg=Branch01
它返回这个
解决方案
换线试试
OracleDataAdapter da = new OracleDataAdapter(sql, con);
和
var command = new OracleCommand(sql, con); command.Parameters.Add("Branch_Desg", branchDesg); OracleDataAdapter da = new OracleDataAdapter(command);
似乎没有办法直接将绑定参数添加到 an OracleDataAdapter
,因此我们必须OracleCommand
先从 SQL 字符串创建 an ,为 parameter 添加一个值:Branch_Desg
,然后从命令创建适配器。
最后,我能否推荐所有 Oracle 资源(连接、命令和数据适配器)通过在using
块中创建它们来正确处理,例如
使用 (OracleConnection con = new OracleConnection(constr)) { // 使用数据库连接'con'的代码 }
推荐阅读
- excel - 如何确保我的形状“指向”正确的宏?
- c# - 从 Firebase 反序列化 JSON
- c# - 每月运行一次 .Net 方法
- javascript - How to add a category to a drop down menu without using select and option HTML tags by manipulating the DOM
- javascript - Javascript not saving all images at once
- java - 正则表达式匹配 URL 中的文件扩展名
- git - 将分支中的文件签出到不存在此文件的工作分支
- html - 无法在 Chrome 表单自动填充文本上定义字体大小
- angular - Angular Highchart - 设置时区
- c - Not able to insert timestamp data in Cassandra from C program