• 最近在做数据库移植工作(SqlServer 2008 -> Oracle 11g),遇到一些不兼容的问题,以下是一个参数化方面的区别,资料来自其他网友,在此整理了一下。
  • public static String ConnectionString = "Data Source=orcl;User ID=hr;Password=hr;";
  • public static int Update(MacInfo model)
  • {
  • StringBuilder strSql = new StringBuilder();
  • strSql.Append("update MacInfo set ");
  • strSql.Append("Mac_Address=:Mac_Address,");
  • strSql.Append("Mac_Status=:Mac_Status");
  • strSql.Append(" where MacInfo_ID=:MacInfo_ID");
  • //strSql.Append("Mac_Address='"+model.Mac_Address+"',");//拼凑Update字符串是可以执行成功的
  • //strSql.Append("Mac_Status="+model.Mac_Status);
  • //strSql.Append(" where MacInfo_ID='"+model.MacInfo_ID+"'");
  • //这里注意,strSql中的Update语句参数顺序为:Mac_Address、Mac_Status、MacInfo_ID,所以下面OracleParameter
  • //也必须按这个顺序来声明、赋值
  • OracleParameter[] parameters = {
  • new OracleParameter(":Mac_Address", OracleDbType.Varchar2,17),
  • new OracleParameter(":Mac_Status", OracleDbType.Int32,4),
  • new OracleParameter(":MacInfo_ID", OracleDbType.Varchar2,17)};
  • parameters[0].Value = model.Mac_Address;
  • parameters[1].Value = model.Mac_Status.ToString();
  • parameters[2].Value = model.MacInfo_ID;
  • int result = ExecuteCommand(strSql.ToString(), CommandType.Text,parameters);
  • return result;
  • }
  • public static int ExecuteCommand(string queryString, CommandType commandType, params OracleParameter[] param)
  • {
  • int flag = 0;
  • using(OracleConnection con = new OracleConnection(ConnectionString))
  • {
  • OracleCommand command = new OracleCommand(queryString, con);
  • command.CommandType = commandType;
  • if(param != null)
  • {
  • for(int i = 0; i < param.Length; i++)
  • {
  • command.Parameters.Add(param[i]);
  • }
  • }
  • try
  • {
  • command.Connection.Open();
  • flag = command.ExecuteNonQuery();
  • }
  • catch(Exception ex)
  • {
  • throw ex;
  • }
  • finally
  • {
  • command.Connection.Close();
  • command.Dispose();
  • command = null;
  • }
  • }
  • return flag;
  • }
  • 总结一下:
  • 使
    用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序。OLEDB、SqlClient 和 Oracle
    提供程序全部使用不同的语法。例如,用于命名和指定参数的 SQL 语法使用 @ 符号,OLEDB 参数语法需要使用问号 (?) 作为参数占位符,而
    Oracle 提供程序使用冒号 (:)。

    string sqlstr = " select * from table where id=@id and name=@name ";
    System.Data.SqlClient.SqlParameter parameters = newSystem.Data.SqlClient.SqlParameter[2];
    parameters[0] = new SqlParameter("@id", uid);
    parameters[1] = new SqlParameter("@name", name);

    string sqlstr = " select * from table where id=? and name=? ";
    System.Data.OleDb.OleDbParameter parameters = new System.Data.OleDb.OleDbParameter[2];
    parameters[0] = new OleDbParameter("id", uid);
    parameters[1] = new OleDbParameter("name", name);

    string sqlstr = " select * from table where id=:id and name=:name ";
    System.Data.OracleClient.OracleParameter parameters = new System.Data.OracleClient.OracleParameter[2];
    parameters[0] = new OracleParameter(":id", uid);
    parameters[1] = new OracleParameter(":name", name);

    在通过OLEDB传递参数时候需要注意的问题

    对于ACCESS数据库 可以是?cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";

    但是对于SQL数据库 就是cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(?,?)";

    而且在ACCESS中对于传递的参数的添加顺序 即使给出变量名 也必须和SQL语句调用的顺序一致 否则会出错

    比如

    ? cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";
    cmd.Parameters.Clear();

    p = new OleDbParameter();
    p.ParameterName = "@sn"; p.OleDbType = OleDbType.Char; p.Value = sn;
    cmd.Parameters.Add(p);

    p = new OleDbParameter();
    p.ParameterName = "@sadd"; p.OleDbType = OleDbType.Char; p.Value = sadd;
    cmd.Parameters.Add(p);

    因为语句中Values(@sn,@sadd)

    @sn在@sadd之前 如果你在写参数的时候把?@sn?和@sadd的顺序写反 那么传递的参数也会反过来 即使你的?p.ParameterName定义准确了也一样

.NET参数化Oracle查询参数的更多相关文章

  1. oracle查询所有初始化参数(含隐含参数)

    年龄大了,感觉记性不是很好了,还是重新做笔记了.最近在整理些稿子,顺便在记录下oracle查询所有初始化参数(含隐含参数): SELECT i.ksppinm name, i.ksppdesc des ...

  2. 45 个非常有用的 Oracle 查询语句

    ​ 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快 ...

  3. Solr学习总结(四)Solr查询参数

    今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...

  4. Linux 下 Oracle 内核参数优化

    数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Or ...

  5. 【转】Solr客户端查询参数总结

    今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...

  6. 40多个非常有用的Oracle 查询语句

    给大家介绍是40多个非常有用的Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有Oracle 开发者都必备的技能,所以快快收藏吧! 日期 ...

  7. 45个非常有用的 Oracle 查询语句小结

    45个非常有用的 Oracle 查询语句小结 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 ...

  8. 45 个非常有用的 Oracle 查询语句(转)

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...

  9. Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...

随机推荐

  1. 操作native window的QxtWindowSystem (好像是一个IM的一部分)

    http://libqxt.bitbucket.org/doc/0.6/qxtwindowsystem.html https://github.com/psi-plus/plugins/blob/ma ...

  2. PHP并发最佳实践

    直接参考大牛的: http://www.searchtb.com/2012/06/rolling-curl-best-practices.html

  3. crtmpserver初探

    前言       Adobe的FMS(Flash Media Server)是很好用.但对应着分级授权的是money和有限功能开放.商业的东西既然用不起,也阻碍了我们的技术进步,那就只能求助于开源社区 ...

  4. github中的ssh配置

    1.配置git信息 设置git的user name和email: $ git config --global user.name "tigerjibo"$ git config - ...

  5. iOS 面试题:OC基本概念题

    1.什么是类和对象? 类是一组具有同样特征和功能的事物的抽象 对象描写叙述了一个物体的特征和行为实现 类是对象的抽象 对象是类的实例 2.OC中定义类,创建对象,使用对象. OC中定义类分为接口部分, ...

  6. Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  7. raphael入门到精通---属性和事件篇

    属性的使用 上一篇文章我们介绍了raphael如何生成基本的图形(元素),对于每个元素来讲,我们可以添加很多的元素(attr) 下面我就来简单的介绍下元素属性的使用(path元素属性我后面单独列出来介 ...

  8. 浅谈Servlet读取Html参数

    1首先:webApp名称为cookieAndsession.html文件一般放在WebRoot文件夹下:/cookieAndsession/WebRoot/OrderForm.html,那么外界要访问 ...

  9. Exponentiation

    Description Problems involving the computation of exact values of very large magnitude and precision ...

  10. Bootstrap dropdown 使用

    同样是2种方式 参考http://www.bootcss.com/javascript.html#dropdowns JS方式调用 http://www.w3resource.com/twitter- ...