Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在Dapper中处理Oracle数据库连接_Asp.net_Asp.net Mvc_Asp.net Web Api_Dapper - Fatal编程技术网

Asp.net 在Dapper中处理Oracle数据库连接

Asp.net 在Dapper中处理Oracle数据库连接,asp.net,asp.net-mvc,asp.net-web-api,dapper,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

我正在尝试连接到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; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.ComponentModel.DataAnnotations.Schema;
使用System.ComponentModel.DataAnnotations;
命名空间TestAPI.Models
{
公共类测试模型
{
[关键]
public int PRIO_CATEGORY_ID{get;set;}
公共int LANG_ID{get;set;}
public System.DateTime REC_DATE{get;set;}
公共int REC_用户{get;set;}
公共可为空的RFCH_ID{get;set;}
公共字符串DESCR{get;set;}
公共字符串COL_DESCR{get;set;}
公共字符串行_DESCR{get;set;}
公共字符串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; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
命名空间TestAPI.Models
{
公共类TestapContext:DbContext
{
公共数据库集详细信息{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();
  }
 }
}
使用Oracle.ManagedDataAccess.Client;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Web.Http;
使用Newtonsoft.Json;
使用System.Web.Http.Description;
使用测试PI模型;
使用整洁;
命名空间TestAPI.Controllers
{
公共类TestApiModelController:ApiController
{
//GET:api/TestAPIModels
公共IQueryable Getdetails(int id)
{
OracleConnection dbConn=neworacleconnection(“数据源=AX;密码=CM;持久安全信息=True;用户ID=AB”);
dbConn.Open();
var strQuery=@“选择优先级类别ID作为优先级,语言ID作为优先级,记录日期作为记录,记录用户作为重现者,描述,列描述作为列,行描述作为DROW,缩写自STCD\u优先级类别描述,其中记录用户=“+ID;
重新运行dbConn.Query();
dbConn.Close();
}
}
}

它抛出了一个错误,说dbconn.Query不在上下文中,我还尝试了TestAPIContext.Init,即使这样也会抛出错误。谁能给我建议一下如何使用Dapper处理Oracle连接。我不熟悉ASP.NET和创建服务。有点卡住了,非常感谢您的帮助。

您没有通过SQL。此外,不需要显式关闭。您可以将代码包装在一个using-as-under-the-hood-SqlConnection.Dispose()调用SqlConnection.Close()

也许这是一个输入错误,但“retrun”应该是“return”。应该从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);
}
使用(var dbConn=neworacleconnection(“数据源=AX;密码=CM;持久安全信息=True;用户ID=AB”))
{
dbConn.Open();
var strQuery=@“选择优先级类别ID作为优先级,语言ID作为优先级,记录日期作为记录,记录用户作为重现者,描述,列描述作为列,行描述作为DROW,缩写自STCD\u优先级类别描述,其中记录用户=“+ID;
返回dbConn.Query(strQuery);
}

我可以通过以下解决方案处理此问题:

1。安装nuget提供的Oracle.ManagedDataAccess.Core软件包。
2.按如下方式写入连接字符串:

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();
}
受保护的IDbConnection GetChargingOracleDbConnection
{
得到
{
var oracleConnection=neworacleconnection(“OracleConnectionString”);
oracleConnection.Open();
返回oracleConnection;
}
}
var query=“从服务中选择Id、名称”;
使用(var dbConnection=GetChargingOracleDbConnection)
{
返回dbConnection.Query(Query.ToList();
}

可能不是问题,但是“retrun”应该改为“return”。但是代码在var queryResult=dbConn.Query()中抛出错误;错误当前上下文中不存在名称“QueryRult”。同样,在返回查询结果时,方法“query”没有重载。这是因为类中的类型不是string,而是作为公共IQueryable Getdetails(int-id)返回的,对吧,按原样返回。