• 最近在做数据库移植工作(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. perl笔记

    更精确的空白字符串匹配 1.水平空白字符 Perl5.10之前,使用\s这种分类,不够精确,容易导致意料外的结果: Perl5.10中引入\h字符组,用来匹配任意水平空白字符(包括Unicode字符集 ...

  2. How can I get an object's absolute position on the page in Javascript?

    How can I get an object's absolute position on the page in Javascript? How can I get an object's abs ...

  3. CF# 260 A. Laptops

    One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the m ...

  4. linux:如何修改用户的密码

    1.首先,要用CRT软件连接Linux系统. 2.首选,确认是用root用户登录系统的. 输入命令: id ,查看登录用户信息. 3.若修改root自己的密码,直接输入 passwd . 输入两遍,新 ...

  5. [IOI1996] USACO Section 5.3 Network of Schools(强连通分量)

    nocow上的题解很好. http://www.nocow.cn/index.php/USACO/schlnet 如何求强连通分量呢?对于此题,可以直接先用floyd,然后再判断. --------- ...

  6. Spring学习之注入方式

    我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入. 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法, ...

  7. .net DataTable 取值辅助类

    DataTableCommon类主要是帮助取值 方法列表: public static string GetCellString(DataTable dt,int row, int column) p ...

  8. PHP新闻系统开发流程

    PHP新闻系统开发流程一.系统总体设计 (一)系统功能描述和功能模块划分 (二)系统流程分析 (三)系统所用文件二.数据库设计 (一)创建数据库 (二)设计表结构三.新闻发布模块开发 (一)新闻首页 ...

  9. fork出的子进程和父进程的继承关系【转载】

    [原文地址]http://blog.163.com/dengjingniurou@126/blog/static/53989196200962924412524/ fork出的子进程和父进程的继承关系 ...

  10. SubLime2 乱码解决

    参考 http://www.fuzhaopeng.com/2012/sublime-text-2-with-gb2312-gbk-support/ 使用其中提到的方法二安装 首先下载http://su ...