.NET链接Oracle 参数绑定问题
在.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 参数绑定问题的更多相关文章
- 编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)
1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; ...
- spring mvc参数绑定
spring绑定参数的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接 ...
- JDBC链接oracle已经mysql的测试
1.链接oracle package cn.itcast.mybatis.dao; import java.sql.Connection;import java.sql.DriverManager;i ...
- 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. 本文主要来讲解以下内容: ...
- Win7 64位下sql server链接oracle的方法
继上一次mysql同步sql server后,这一次需要将Oracle同步到sql server上来,方案相似,只是在sql server链接oracle的时候费了很多时间. 一.测试环境 本方案实现 ...
- Parameter Binding in ASP.NET Web API(参数绑定)
Parameter Binding in ASP.NET Web API(参数绑定) 导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnbl ...
- springMVC第一天——入门、整合与参数绑定
大纲摘要: 1.Springmvc介绍 2.入门程序 3.Springmvc架构讲解 a) 框架结构 b) 组件说明 4.Springmvc整合mybatis 5.参数绑定 乱码问题解决 a) Spr ...
- 【Hibernate实战】源码解析Hibernate参数绑定及PreparedStatement防SQL注入原理
本文采用mysql驱动是5.1.38版本. 本篇文章涉及内容比较多,单就Hibernate来讲就很大,再加上数据库驱动和数据库相关,非一篇文章或一篇专题就能说得完.本文从使用入手在[Spr ...
- SpringMVC学习记录四——功能开发及参数绑定
9 商品修改功能开发 9.1 需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据 ...
随机推荐
- 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比
最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...
- Kafka协议兼容性改进
在Kafka 0.10.2.0之前,Kafka服务器端和客户端版本之间的兼容性是"单向"的,即高版本的broker可以处理低版本client的请求.反过来,低版本的broker不能 ...
- 产品经理学Python:逻辑判断与运算符
这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...
- sublime Text2 快捷键精华版
Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴 ...
- hdu1198 Farm Irrigation 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 简单并查集 分别合并竖直方向和水平方向即可 代码: #include<iostream&g ...
- BM25和Lucene Default Similarity比较 (原文标题:BM25 vs Lucene Default Similarity)
原文链接: https://www.elastic.co/blog/found-bm-vs-lucene-default-similarity 原文 By Konrad Beiske 翻译 By 高家 ...
- 最新合购网源码net.asp程序 彩票合买功能采用全新内核、全新架构,更小巧、功能更强、更快、更安全稳定
合买代购功能 可购彩种:福彩3D.排列3.重庆时时彩.天津时时彩.广东11选5.11运夺金.江苏快3.广西快3.拥有上百种玩法,更多彩种即将开发完成,更多的彩种不断开发更新中... 选号投注:建立追号 ...
- Java面试题之最扯淡的String
public class ThreadException { public static void main(String[] args) { 没加final的代码 String hello = &q ...
- C语言解析17monipdb.dat(http://www.ipip.net/)免费数据库
官方给的链接打不开,而且里面的逻辑,每次都会打开文件,所以自己做了点个修改,发上来,借大家参考: #include <stdio.h> #include <stdlib.h> ...
- 20170515-20170523学习计划---学习java(1)
背景: 组内搞了一个读书会,我是负责人,我们学习的主题是java,为了更好服务读书会,所以安排一下学习计划,到时候在读书会上做分享. 这是第二次读书会,第一次讲了java的一些基本知识,这次只要学习对 ...