关于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)};部分的参数前面不能有@或者:
上面的代码可以正确的将数据插到表中