Не все переменные связаны Oracle REST Web API - PullRequest
0 голосов
/ 21 июня 2020

Я получаю Не все переменные связаны.

Вот как выглядит мой код.

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;
}

По какой-то причине он не работает так, как предполагалось.

Снимок экрана выглядит так:

enter image description here

Now My Updated Code Looks like this:

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/
        public IEnumerable Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api//5
        public string Get(int id)
        {
            return "value";
        }

        // GET api//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 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 vr = new List(dt.Rows.Count);
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow vaultrecord in dt.Rows)
                {
                    vr.Add(new ReadVaultBal(vaultrecord));
                }
            }
            return vr;
        }


        // POST api/
        public void Post([FromBody]string value)
        {
        }

        // PUT api//5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api//5
        public void Delete(int id)
        {
        }
    }
}

Thats what i have for now. As you can see it Returns in Sqldeveloper.In the Code, it does not. I do not know what and where to Go from here.

If i run the REST api just like this :

http://localhost:7177/api/VaultService?Branch_Desg=Branch01

It returns this

введите описание изображения здесь

1 Ответ

0 голосов
/ 21 июня 2020

Попробуйте заменить строку

OracleDataAdapter da = new OracleDataAdapter(sql, con);

на

var command = new OracleCommand(sql, con);
    command.Parameters.Add("Branch_Desg", branchDesg);
    OracleDataAdapter da = new OracleDataAdapter(command);

Кажется, нет способа добавить параметры привязки непосредственно к OracleDataAdapter, поэтому мы должны создать OracleCommand из строки SQL сначала добавьте значение для параметра :Branch_Desg, а затем создайте адаптер из команды.

Наконец, могу ли я порекомендовать, чтобы все ресурсы Oracle ( соединение, команда и адаптер данных) размещаются правильно, создавая их в блоках using, например

using (OracleConnection con = new OracleConnection(constr))
{
    // code using the database connection 'con'
}
...