Dapper에서 Oracle Database Connection 처리

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

문제

Oracle 데이터베이스에 연결하여 쿼리를 실행하려고합니다.

아래는 내 모델 클래스입니다.

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 클래스

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

이제 Dapper로 컨트롤러를 만들려고 할 때 SQL 데이터베이스에 연결하려고하는 대부분의 포럼에 문제가 있습니다. Oracle DB에 액세스하여 JSON 형식으로 결과를 반환하려고합니다. 그래서

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

dbconn.Query가 컨텍스트에 없다는 오류가 발생하고 TestAPIContext.Init를 시도해도 오류가 발생합니다. 누구나 Dapper와 Oracle 연결을 처리하는 방법을 제안 해 줄 수 있습니까? 저는 ASP.NET과 서비스 생성에 익숙하지 않습니다. 정말 붙어있는 종류의 어떤 도움을 크게 주시면 감사하겠습니다.

수락 된 답변

당신은 SQL을 통과하지 못했습니다. 또한 명시 적 종료는 필요하지 않습니다. SqlConnection.Dispose ()는 SqlConnection.Close ()를 호출하여 코드를 래핑 할 수 있습니다.

아마도 이것은 오타이지만 "retrun"은 "return"이어야합니다. ConnectionString은 app.config 대 하드 코딩 된 것으로 읽어야하며 'id'매개 변수도 고려해야합니다.

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

인기 답변

다음 해결책을 통해이 문제를 해결할 수있었습니다.

1. Oracle.ManagedDataAccess.Core 패키지를 nuget에서 설치 하십시오 .
2. 다음과 같이 ConnectionString을 작성하십시오.

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

PORT=1521 => Oracle의 기본 포트는 1521이며, Oracle 서버 포트로 변경할 수 있습니다
0.0.0.0 => Oracle 서버 IP 또는 이름
sidName => oracle 서버의 SidName

3. C # 스 니펫 코드 :

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.