Maneje la conexión de la base de datos Oracle en Dapper

asp.net asp.net-mvc asp.net-web-api dapper

Pregunta

Estoy tratando de conectarme a la Base de Datos Oracle e intentar ejecutar una consulta.

Así que abajo está mi clase de modelo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace TestAPI.Models
{
public class TestAPIModel
{
    [Key]
    public int PRIO_CATEGORY_ID { get; set; }
    public int LANG_ID { get; set; }
    public System.DateTime REC_DATE { get; set; }
    public int REC_USER { get; set; }
    public Nullable<int> RFCH_ID { get; set; }
    public string DESCR { get; set; }
    public string COL_DESCR { get; set; }
    public string ROW_DESCR { get; set; }
    public string ABBR { get; set; }
}
}

DBContext Class es

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace TestAPI.Models
{
public class TestAPIContext: DbContext
{
        public DbSet<TestAPIModel> details { get; set; }
}
}

Ahora, tratando de crear el Controlador con el Dapper, ahora el problema está en la mayoría de los foros que está tratando de conectarse a la Base de Datos SQL. Estoy tratando de acceder a Oracle DB y devolver el resultado en formato JSON. Así que si doy

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using System.Web.Http.Description;
using TestAPI.Models;
using Dapper;

namespace TestAPI.Controllers
 {
  public class TestAPIModelsController : ApiController
   {
     // GET: api/TestAPIModels
    public IQueryable<TestAPIModel> Getdetails(int id)
    {
      OracleConnection dbConn = new OracleConnection("DATA SOURCE=AX;PASSWORD=CM;PERSIST SECURITY INFO=True;USER ID=AB");
      dbConn.Open();
      var strQuery = @"Select PRIO_CATEGORY_ID as PRIO,LANG_ID as LANG, REC_DATE as REC, REC_USER as RECUSER, DESCR,COL_DESCR AS COL,ROW_DESCR as DROW,ABBR from STCD_PRIO_CATEGORY_DESCR where REC_USER =  " +id;
      retrun dbConn.Query<TestAPIModel>();
      dbConn.Close();
  }
 }
}

Lanza un error que dice que dbconn.Query no está en contexto y también probé TestAPIContext.Init incluso eso arroja un error. ¿Puede alguien sugerirme cómo tratar la conexión de Oracle con el Dapper? Soy nuevo en ASP.NET y en Creando los servicios. realmente atrapado, cualquier ayuda es muy apreciada.

Respuesta aceptada

No estabas pasando el SQL. Además, el cierre explícito no es necesario. Puede envolver el código en un uso como bajo SqlConnection.Dispose () llama al SqlConnection.Close ().

Quizás sea un error tipográfico, pero "retrunar" debería ser "regresar". Connectionstring se debe leer desde app.config vs. hard codificado y también consideraría hacer de 'id' un parámetro.

using (var dbConn = new OracleConnection("DATA SOURCE=AX;PASSWORD=CM;PERSIST SECURITY INFO=True;USER ID=AB");)
{
      dbConn.Open();
      var strQuery = @"Select PRIO_CATEGORY_ID as PRIO,LANG_ID as LANG, REC_DATE as REC, REC_USER as RECUSER, DESCR,COL_DESCR AS COL,ROW_DESCR as DROW,ABBR from STCD_PRIO_CATEGORY_DESCR where REC_USER = " +id;
      return dbConn.Query<TestAPIModel>(strQuery);
}

Respuesta popular

Podría manejar esto, con la siguiente solución:

1. Instalar Oracle.ManagedDataAccess.Core paquete de Nuget.
2. Escriba ConnectionString de la siguiente manera:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521))(CONNECT_DATA=(SID=sidName))); User Id=*****; Password=******;

PORT=1521 => El puerto predeterminado de Oracle es 1521, puede cambiarlo con su puerto de servidor Oracle
0.0.0.0 => IP o nombre del servidor Oracle
sidName => SidName del servidor oracle

3. C # código de fragmento:

protected IDbConnection GetChargingOracleDbConnection
{
    get
    {
        var oracleConnection = new OracleConnection("OracleConnectionString");
        oracleConnection.Open();
        return oracleConnection;
    }
}

var query = "SELECT Id, Name FROM Service";
using (var dbConnection = GetChargingOracleDbConnection)
{
    return dbConnection.Query<MyModel>(query).ToList();
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué