• 最近在做数据库移植工作(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. WM_SYSCOMMAND包括很多功能,比如:拖动左边框、拖动标题栏、滚动条滚动、点击最小化、双击标题栏——Delphi 通过事件代替了大部分常用的消息,所以Delphi 简单、易用、高效

    procedure TForm1.WMSysCommand(var Message: TWMSysCommand); var str: string; begin case Message.CmdTy ...

  2. HDU 4981 Goffi and Median

    题解:排序取中位数,然后与平均数比较即可. #include <cstdio> #include <algorithm> using namespace std; double ...

  3. 《windows程序设计》学习_3.3:利用xp扫雷资源

    #include<windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPAR ...

  4. 基于mini2440的看门狗(裸机)

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  5. C/C++存储区划分

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化 ...

  6. [Swust OJ 838]--最优价值(0-1背包+数学)

    题目链接:http://acm.swust.edu.cn/problem/838/ Time limit(ms): 1000 Memory limit(kb): 10000 Description 我 ...

  7. ThinkPHP第十三天(CONF_PATH、APP_PATH,UEditor用法)

    1.CONF_PATH 项目配置文件目录地址,APP_PATH 项目地址 2.ThinkPHP中更新数据的连接操作位save(),更新一个字段可以用setField(name,value)方法. 3. ...

  8. [转]如何理解c和c ++的复杂类型声明

    本文作者girlrong是网易广州社区的C语言版版主,这篇文章被选在精华区.很是不错,不敢独享!据说她乐于助人,虚心诚恳,颇受网友欢迎.只可惜现在已退隐江湖了.在最近学习C语言过程中,了解些前辈大牛的 ...

  9. cnzz广告管家使用心得

    步着谷歌广告管家的后尘,国内百度公司和知名网络流量数据统计公司cnzz也分别推出了百度广告管家和cnzz广告管家.笔者分别注册了这两个网站.通过一段时间的使用,写下此文,希望对各位站长朋友们有所帮助. ...

  10. Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)

    最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...