您现在的位置是:主页 > news > 网站风格定位/刚出来的新产品怎么推

网站风格定位/刚出来的新产品怎么推

admin2025/6/7 0:53:25news

简介网站风格定位,刚出来的新产品怎么推,网站内的链接怎么做,重庆建设造价信息网站一 前言 实战踩坑系列,调用第三方Oracle存储,各种血泪史,现记录如下。 二 入坑 首先,调用Oracle需要安装客户端驱动才行,但是在程序开发中下载客户端驱动是一个不明智的选择。于是,不管是微软,还…

网站风格定位,刚出来的新产品怎么推,网站内的链接怎么做,重庆建设造价信息网站一 前言 实战踩坑系列,调用第三方Oracle存储,各种血泪史,现记录如下。 二 入坑 首先,调用Oracle需要安装客户端驱动才行,但是在程序开发中下载客户端驱动是一个不明智的选择。于是,不管是微软,还…

  一 前言

  实战踩坑系列,调用第三方Oracle存储,各种血泪史,现记录如下。

  二 入坑

  首先,调用Oracle需要安装客户端驱动才行,但是在程序开发中下载客户端驱动是一个不明智的选择。于是,不管是微软,还是oracle,都提供了方便我们程序开发的插件(dll/nuget),如System.Data.Oracle,Oracle.ManagedDataAccess。下图搜索结果中

  Oracle.ManagedDataAccess.EntityFramework包含Oracle.ManagedDataAccess,适用于.net framework,如果你想要使用EF的话。因为这里是NetCore程序,所以我选择了

  Oracle.ManagedDataAccess.Core包。

  

.Net Core中使用oracle数据库并调用存储过程方法

  初始程序:

  private static void Remote()

  {

  // 创建Oracle连接

  var connString="User Id=user;Password=password;Data Source=ip:port/service_name;";

  // 存储过程名称

  var storedProcName="SetTemperatureData";

  // 参数设置

  IDataParameter[] parameters=new IDataParameter[2];

  parameters[0]=new OracleParameter("@id", 1);

  parameters[1]=new OracleParameter("@date", DateTime.Now);

  parameters[2]=new OracleParameter("@result", OracleDbType.Decimal, ParameterDirection.Output);

  using (OracleConnection conn=new OracleConnection(connString))

  using (OracleCommand command=BuildQueryCommand(conn, storedProcName, parameters))

  {

  try

  {

  conn.Open();

  var isSuccess=command.ExecuteNonQuery();

  var result=(int)command.Parameters["@result"];

  }

  catch (Exception ex)

  {

  Console.WriteLine(ex.ToString());

  }

  }

  }

  private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)

  {

  OracleCommand command=new OracleCommand(storedProcName, connection);

  commandmandType=CommandTypedProcedure;

  foreach (OracleParameter parameter in parameters)

  {

  command.Parameters.Add(parameter);

  }

  return command;

  }

  运行程序报错:

  错误1:

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:对接方提供的链接是从库地址,只有读权限。

  错误2:

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:存储过程名称问题,缺少了表空间,大概的意思是test.SetTemperatureData。

  错误3:

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:入参格式问题,字符串类型和时间类型不统一导致。

  错误4:

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:(int)command.Parameters["@result"]不能直接转换,需要进行多次转换Convert.ToDecimal(((OracleDecimal)command.Parameters["@result"].Value).Value);

  错误5:

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:了解到第三方oracle采用的是分布式负载均衡的方式,提供了多个ip地址,那原有的链接方式就不适用了,需要采用tsname.oa的方式链接。

  

.Net Core中使用oracle数据库并调用存储过程方法

  错误6:若你由于粗心大意,也会有所收获

  

.Net Core中使用oracle数据库并调用存储过程方法

  产生原因:查看链接字符错误,请仔细检查

  三 出坑

  简直是错误大全,哈哈!最后代码粘贴如下:

  private static void Remote()

  {

  // 创建Oracle连接

  var connString="User ID=uer;Password=password;Data Source=test";

  if (string.IsNullOrWhiteSpace(OracleConfiguration.OracleDataSources["test"]))

  {

  OracleConfiguration.OracleDataSources.Add("test",

  "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=[ip1])(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=[ip2])" +

  "(PORT=1521))(LOAD_BALANCE=yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service_name))))");

  }

  // 存储过程名称

  var storedProcName="testdProcName";

  // 参数设置

  IDataParameter[] parameters=new IDataParameter[3];

  parameters[0]=new OracleParameter("@id", 1);

  parameters[1]=new OracleParameter("@date", DateTime.Now);

  parameters[2]=new OracleParameter("@result", OracleDbType.Decimal, ParameterDirection.Output);

  using (OracleConnection conn=new OracleConnection(connString))

  using (OracleCommand command=BuildQueryCommand(conn, storedProcName, parameters))

  {

  try

  {

  conn.Open();

  var isSuccess=command.ExecuteNonQuery();

  var result=Convert.ToDecimal(((OracleDecimal)command.Parameters["@result"].Value).Value);

  }

  catch (Exception ex)

  {

  Console.WriteLine(ex.ToString());

  }

  }

  }