在.NET项目中链接Oracle使用的驱动是 Oracle.ManagedDataAccess.dll ,这里下载

所遇到的问题

使用存储过程一个参数没有问题,发现两个或两个以上会有参数没传过来的现象。

最后通过排查发现是没有添加参数绑定(问题找了好长时间,刚开始还以为驱动的问题+_+)。

需要设置设置属性 BindByName = true;

下面附上 OracleHelper

 public class OracleHelper
{
/// <summary>
/// 测试连接字符串
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public static bool TestConn(string connectionString)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
try
{
connection.Open();
return true;
}
catch (OracleException e)
{
connection.Close();
//throw e;
return false;
}
finally
{
connection.Close();
}
}
} /// <summary>
/// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="connectionString"></param>
/// <param name="strSQL">查询语句</param>
/// <returns>SqlDataReader</returns>
public static OracleDataReader ExecuteReader(string connectionString, string strSQL)
{
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand(strSQL, connection);
try
{
connection.Open();
OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return myReader;
}
catch (OracleException e)
{
throw e;
} } /// <summary>
/// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <param name="connectionString"></param>
/// <param name="cmdParms"></param>
/// <returns>SqlDataReader</returns>
public static OracleDataReader ExecuteReader(string connectionString, string SQLString, List<OracleParameter> cmdParms)
{
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand();
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (OracleException e)
{
throw e;
}
// finally
// {
// cmd.Dispose();
// connection.Close();
// } } private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, List<OracleParameter> cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
cmd.BindByName = true;
foreach (OracleParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
} /// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <returns>DataSet</returns>
public static DataSet Query(string connectionString, string SQLString, List<OracleParameter> cmdParms)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
OracleCommand cmd = new OracleCommand();
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
using (OracleDataAdapter da = new OracleDataAdapter(cmd))
{
DataSet ds = new DataSet();
try
{
da.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch (OracleException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
} /// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <returns>DataSet</returns>
public static DataSet Query(string connectionString, string SQLString)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
OracleDataAdapter command = new OracleDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (OracleException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
} //public static DataTable QueryDataTable(string connectionString, string SQLString)
//{
// return Query(connectionString, SQLString).Tables[0];
//} public static DataTable QueryDataTable(string connectionString, string SQLString, List<JsonParamModel> jsonModels)
{
if (jsonModels.Count == )
{
return Query(connectionString, SQLString).Tables[];
}
var paramsList = new List<OracleParameter>(); foreach (var json in jsonModels)
{
//var sqlParameter = new SqlParameter(string.Format("@{0}", json.paramName), SqlDbType.Variant);
//ParamAssignment(ref sqlParameter, json);
var sqlParameter = new OracleParameter(string.Format(":{0}", json.paramName), json.paramValue);//@号调整成 :号
//ParamAssignment(ref sqlParameter, json);
paramsList.Add(sqlParameter);
} return Query(connectionString, SQLString, paramsList).Tables[];
} private static void ParamAssignment(ref OracleParameter param, JsonParamModel jsonParamModel)
{
var dbType = jsonParamModel.paramDbType;
var value = jsonParamModel.paramValue;
switch (dbType)
{
case "SqlDbType.DateTime":
param.Value = DateTime.Parse(value);
break;
case "SqlDbType.UniqueIdentifier":
param.Value = Guid.Parse(value);
break;
case "SqlDbType.Int":
param.Value = int.Parse(value);
break;
default:
param.Value = value;
break;
}
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string connectionString, string SQLString)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
using (OracleCommand cmd = new OracleCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (OracleException e)
{
connection.Close();
throw e;
}
}
}
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string connectionString, string SQLString, List<OracleParameter> cmdParms)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
cmd.BindByName = true; PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
}
}
} public static int ExecuteSql(string connectionString, string SQLString, List<JsonParamModel> jsonModels)
{
if (jsonModels.Count == )
{
return ExecuteSql(connectionString, SQLString);
} var paramsList = new List<OracleParameter>(); foreach (var json in jsonModels)
{
//var sqlParameter = new SqlParameter(string.Format("@{0}", json.paramName), SqlDbType.Variant);
//ParamAssignment(ref sqlParameter, json);
var sqlParameter = new OracleParameter(string.Format(":{0}", json.paramName), json.paramValue);
//ParamAssignment(ref sqlParameter, json);
paramsList.Add(sqlParameter);
} return ExecuteSql(connectionString, SQLString, paramsList);
}
}

.NET链接Oracle 参数绑定问题的更多相关文章

  1. 编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)

    1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; ...

  2. spring mvc参数绑定

    spring绑定参数的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接 ...

  3. JDBC链接oracle已经mysql的测试

    1.链接oracle package cn.itcast.mybatis.dao; import java.sql.Connection;import java.sql.DriverManager;i ...

  4. Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)

    导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html. 本文主要来讲解以下内容: ...

  5. Win7 64位下sql server链接oracle的方法

    继上一次mysql同步sql server后,这一次需要将Oracle同步到sql server上来,方案相似,只是在sql server链接oracle的时候费了很多时间. 一.测试环境 本方案实现 ...

  6. Parameter Binding in ASP.NET Web API(参数绑定)

    Parameter Binding in ASP.NET Web API(参数绑定) 导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnbl ...

  7. springMVC第一天——入门、整合与参数绑定

    大纲摘要: 1.Springmvc介绍 2.入门程序 3.Springmvc架构讲解 a) 框架结构 b) 组件说明 4.Springmvc整合mybatis 5.参数绑定 乱码问题解决 a) Spr ...

  8. 【Hibernate实战】源码解析Hibernate参数绑定及PreparedStatement防SQL注入原理

        本文采用mysql驱动是5.1.38版本. 本篇文章涉及内容比较多,单就Hibernate来讲就很大,再加上数据库驱动和数据库相关,非一篇文章或一篇专题就能说得完.本文从使用入手在[Spr ...

  9. SpringMVC学习记录四——功能开发及参数绑定

    9       商品修改功能开发 9.1      需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据 ...

随机推荐

  1. 让div自适应浏览器窗口居中显示

    今天做 banner 时发现一个问题,就是浏览器窗口水平拉伸时 banner 图未能居中,所以网上找了些资料,自己写了个小 demo html代码: <div class="div1& ...

  2. My First GitHub

    第一次使用github 在https://github.com/注册账号. 登陆之后,首先创建一个仓库(+ new repository),开源(public)的仓库是免费的,私人(private)的 ...

  3. 你跟上技术趋势了么? 来看看这10场2017热门it技术会议!

    2016年各类大会让人应接不暇,技术圈儿最不缺的就是各种大会小会,有的纯干货,有的纯广告.作为一名技术开发者,参加了几场大会,你是不是也开始思忖:究竟哪些会议才值得参加?下面活动家为你推荐几场2017 ...

  4. Yeelink初步体验

    环境 Qemu: 2.8.0 开发板:vexpress-ca9   概述     前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了.要玩物联网,Yeelink不得不说,它提供了 ...

  5. ajax分页实现(php)

    ajax分页实现(php) 使用jquery.pagination.js插件 引入js文件.css文件 <link rel="stylesheet" href="/ ...

  6. Java AOP (2) runtime weaving 【Java 切面编程 (2) 运行时织入】

    接上一篇 Java AOP (1) compile time weaving [Java 切面编程 (1) 编译期织入] Dynamic proxy   动态代理 Befor talking abou ...

  7. springboot(十二):springboot如何测试打包部署

    有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...

  8. LeetCode 题解(一):Two Sum

    LeetCode : two sum 第一次写博客,算是熟悉这些编辑环境吧,本来是打算在csdn上用markdown写的,结果改了博客介绍就被关闭了,晕死...好了,话不多说,今天打算拿LeetCod ...

  9. Python常见的错误汇总

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...

  10. vue2.0结合Element实现select动态控制input禁用

    今天有一个盆友问小颖,怎么实现用select动态控制input禁用,也就是说,input默认是可编辑的,但是每当我选一次select,input就会变成禁用,虽然小颖不知道她为什么这样做,因为小颖觉得 ...