云中客

梦想有多大,就能走多远

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

MSDAORA Sql的参数传递方法

  MSDAORA及Oracle .NET Framework 数据提供程序。Oracle .NET Framework 数据提供程序支持使用 Oracle 客户端软件提供的 Oracle 调用接口 (OCI) 访问 Oracle 数据库。该数据提供程序设计的功能与 SQL Server、OLE DB 和 ODBC 的 .NET Framework 数据提供程序的功能类似。要使用 Oracle .NET Framework 数据提供程序,应用程序必须如下所示引用 System.Data.OracleClient 命名空间。

  使用Sql形式如下:

INSERT INTO TS_ITEM(ITEM_CD) VALUES(:ITEM_CD)
SELECT ITEM_CD  FROM TS_ITEM WHERE ITEM_CD BETWEEN :ITEMFROM AND :ITEMTO

  Sql中的【:ITEM_CD,:ITEMFROM,:ITEMTO】这些特殊的参数名就是MSDAORA的参数传递特点。

  1:参数名不区分大小写。

  2:SQL 语句传递参数时不支持问号 (?) 占位符,必须使用命名的参数。

    3:SQL 语句中使用命名的参数时,参数名前面必须有一个冒号 (:)。在存储过程或在代码的其他地方引用命名的参数时(例如,将 OracleParameter 对象添加到 Parameters 属性时),请不要在命名的参数前加上冒号 (:)。数据提供程序会自动提供冒号。

  4:OracleParameters集合中参数的数量必须等于命令文本中命名参数的数量,否则用于 Oracle 的 .NET Framework 数据提供程序会引发错误。

应用举例:

        /// <summary>
        ///参数追加
        /// </summary>
        /// <param name="valName">参数名</param>
        /// <param name="var">参数値</param>
        /// <param name="valType">参数类型</param>
        public static void AddDbParameter(string valName, object var, OracleType valType)
        {
            OracleParameter p = new OracleParameter();
            p.ParameterName = valName;
            p.Direction = ParameterDirection.Input;
            p.OracleType = valType;
            p.IsNullable = true;
            p.Value = var;
            DbCommand.Parameters.Add(p);
        }
        /// <summary>
        /// 数据取得
        /// </summary>
        /// <param name="i_ItemFrom">項目From</param>
        /// <param name="i_ItemTO">項目To</param>
        /// <returns></returns>
        public static DataTable GetData(string i_ItemFrom, string i_ItemTO)
        {
            MsOracleParModel.PreProcess();
            MsOracleParModel.PrepareDbSql(DBSql.MsORASelSql);
            MsOracleParModel.AddDbParameter("ITEMFROM", i_ItemFrom, OracleType.VarChar);
            MsOracleParModel.AddDbParameter("ITEMTO", i_ItemTO, OracleType.VarChar);

            return MsOracleParModel.GetDataSet("M_ITEM").Tables[0];
        }

    存储过程也是如此使用,只是CommandType不一样而已。

 DbCommand.CommandType = CommandType.StoredProcedure;

    优点:1,在缓存没清除的情况下,此Sql数据库只需解析一次,再次执行此Sql时速度将更快。

        2,传入参数顺序没要求,只要名字对应上就可以。

    缺点:1,数据类型和Oracle数据库有些不一致。

        2,速度比不过ODP。

        其他缺点等大虾提供了。

附上此DBHelper(精简版):

MSORA DBHelper

上一篇:OLE DB Sql的参数传递方法   下一篇:ODP.Net Sql的参数传递方法

posted on 2013-03-05 14:22  走遍江湖  阅读(894)  评论(0编辑  收藏  举报