现在的位置: 首页 > 综合 > 正文

关于C#用参数的形式操作Oracle数据库日期字段时的一些问题

2013年10月22日 ⁄ 综合 ⁄ 共 3272字 ⁄ 字号 评论关闭

关于C#用参数的形式操作Oracle数据库日期字段时的一些问题

Oracle的日期字段问题一直是比较怪的。

在用C#进行数据库的操作时,用参数的形式传递,经过几次测试,和SQL有下面的区别:

表结构如下:

create table T_DOC_DOCTYPE
(
  DOCTYPEID   NUMBER,
  DOCTYPENAME VARCHAR2(50),
  ISDEL       VARCHAR2(10) default '否',
  ADDTIME     DATE,
  OFFICERID   NUMBER,
  OFFICERIP   VARCHAR2(35)
)

 

1、在model层,日期字段用string类型

如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace HWQY_Model.Doc
{
   public class M_DOC_DOCTYPE
    {
        public M_DOC_DOCTYPE()
        { }
        #region Model
        private int _doctypeid;
        private string _doctypename;
        private string _isdel;
        private string _addtime;
        private int _officerid;
        private string _officerip;
        /// <summary>
        ///
        /// </summary>
        public int DOCTYPEID
        {
            set { _doctypeid = value; }
            get { return _doctypeid; }
        }
        /// <summary>
        ///
        /// </summary>
        public string DOCTYPENAME
        {
            set { _doctypename = value; }
            get { return _doctypename; }
        }
        /// <summary>
        ///
        /// </summary>
        public string ISDEL
        {
            set { _isdel = value; }
            get { return _isdel; }
        }
        /// <summary>
        ///
        /// </summary>
        public string ADDTIME
        {
            set { _addtime = value; }
            get {
            

                return _addtime;
           
            }
        }
        /// <summary>
        ///
        /// </summary>
        public int OFFICERID
        {
            set { _officerid = value; }
            get { return _officerid; }
        }
        /// <summary>
        ///
        /// </summary>
        public string OFFICERIP
        {
            set { _officerip = value; }
            get { return _officerip; }
        }
        #endregion Model
    }
}

2、在Task层传递的参数类型中用System.Data.OleDb.OleDbType.Date类型。

        /// <summary>
        /// 增加一条数据
        /// </summary>
        public static int Add(HWQY_Model.Doc.M_DOC_DOCTYPE model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into T_DOC_DOCTYPE(");
            strSql.Append("DOCTYPEID,DOCTYPENAME,ISDEL,ADDTIME,OFFICERID,OFFICERIP)");
            strSql.Append(" values (");
            strSql.Append(":DOCTYPEID,:DOCTYPENAME,:ISDEL,:ADDTIME,:OFFICERID,:OFFICERIP)");
           // System.Data.OleDb.OleDbParameter
            OleDbParameter[] parameters = {
     new OleDbParameter("DOCTYPEID", System.Data.OleDb.OleDbType.Integer,4),
     new OleDbParameter("DOCTYPENAME", System.Data.OleDb.OleDbType.VarChar,50),
     new OleDbParameter("ISDEL", System.Data.OleDb.OleDbType.VarChar,10),
     new OleDbParameter("ADDTIME", System.Data.OleDb.OleDbType.Date),
     new OleDbParameter("OFFICERID", System.Data.OleDb.OleDbType.Integer,4),
     new OleDbParameter("OFFICERIP", System.Data.OleDb.OleDbType.VarChar,40)};
            parameters[0].Value = model.DOCTYPEID;
            parameters[1].Value = model.DOCTYPENAME;
            parameters[2].Value = model.ISDEL;
            parameters[3].Value ="2008-09-09";
            parameters[4].Value = model.OFFICERID;
            parameters[5].Value = model.OFFICERIP;

            int intResult = 0;
            intResult = HWQY_Task.HWQY_OraHelper.ExecuteSql(strSql.ToString(), parameters);
            return intResult;
        }

要修改的地方有:

(1)参数名不能用SQL下的@DOCTYPEID的形式,而需要将@换成:。

(2)日期字段用字段串的形式,不需要使用to_date函数即可以。

 (3)new OleDbParameter("OFFICERIP", System.Data.OleDb.OleDbType.VarChar,40)};部分的参数前面不能有@或者: 

上面的代码可以正确的将数据插到表中

抱歉!评论已关闭.