菜鸟求助:C#向oracle插入date类型数据问题

linkkee 2011-11-14 04:38:28

string create = @" create table AMArchives
(
IDVolume NUMBER not null,
IDArchive NUMBER,
ArchiveID nvarchar2(200),
DutyMan nvarchar2(200),
Title nvarchar2(200),
GotTime date,
)
tablespace test";
string insert = string.Format("insert into AMArchives
(IDVolume,IDArchive,ArchiveID,DutyMan,Title,GotTime,Pages,Remark,JuanXuHao,TitleFormat,GotTimeSpecial)
values ({0},{1},'{2}','{3}','{4}','{5}')",
IDVolume, IDArchive, ArchiveID, DutyMan, Title, Convert.ToDateTime(GotTime));

int IDVolume;
decimal IDArchive;
string ArchiveID;
string DutyMan;
string Title;
string GotTime;



运行时显示文字与格式字符串不匹配,现在基本确定是date的原因,高手们告诉下我应该怎么写这段代码啊
...全文
351 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
linkkee 2011-11-14
  • 打赏
  • 举报
回复
解决了解决了
To_Date('{5}','yyyy-mm-dd hh24:mi:ss')
谢谢楼上各位了
linkkee 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tengjian1981 的回复:]

values ({0},{1},'{2}','{3}','{4}',To_Date('{5}','yyyy-MM-dd'))",
[/Quote]

日期格式图片在转换整个输入字符串之前结束
tengjian1981 2011-11-14
  • 打赏
  • 举报
回复
values ({0},{1},'{2}','{3}','{4}',To_Date('{5}','yyyy-MM-dd'))",
linkkee 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tsapi 的回复:]

GotTime输入的格式符合日期格式不
[/Quote]
是从sqlserver中的datetime直接转过来的,格式应该没问题吧
hinada99 2011-11-14
  • 打赏
  • 举报
回复
也可以这样写
OracleCommand cmd=new OracleCommand();

cmd.CommandType = CommandType.Text
cmd.Connection = conn;
cmd.CommandText = sqlstr;

string sqlstr="insert into AMArchives(IDVolume,IDArchive,ArchiveID,DutyMan,Title,GotTime,Pages,Remark,JuanXuHao,TitleFormat,GotTimeSpecial) values(:IDVolume,:IDArchive,:ArchiveID ,:DutyMan ,:Title ,:GotTime)";

cmd.Praramerters.Add(":IDVolume",OracleType.Number);
cmd.Praramerters.Add(":IDArchive",OracleType.Number);
cmd.Praramerters.Add(":ArchiveID",OracleType.nvarchar(100));
cmd.Praramerters.Add(":DutyMan",OracleType.nvarchar(100));
cmd.Praramerters.Add(":GotTime",OracleType.Date);

cmd.Praramerters[0].Value=IDVolume;
cmd.Praramerters[1].Value=IDArchive
cmd.Praramerters[2].Value=ArchiveID;
cmd.Praramerters[3].Value=DutyMan;
cmd.Praramerters[4].Value=GotTime;

cmd.ExcuteNoneQuery();


mizuho_2006 2011-11-14
  • 打赏
  • 举报
回复
不用字符串相加,使用添加参数的方式也可以,还可以防止SQL注入攻击。。
烟波钓 2011-11-14
  • 打赏
  • 举报
回复
以前遇到过这个问题 具体代码忘记了 解决思路大体如下:
在你的Insert语句中插入date那一列的时候,调用一个库中的类型转换函数 好像是Convert(类型,值),完后你在code中给这个数据赋值的时候直接给它一个string类型的
hinada99 2011-11-14
  • 打赏
  • 举报
回复
不是字符串相加。
"+变量+" : 如果变量不是string, 这样写到sql语句中
'"+变量+"' :如果变量是string, 这样写到sql语句中
Daqing 2011-11-14
  • 打赏
  • 举报
回复
GotTime输入的格式符合日期格式不
linkkee 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mizuho_2006 的回复:]

用字符串相加的方式
C# code

string insert = @"insert into AMArchives
(IDVolume,IDArchive,ArchiveID,DutyMan,Title,GotTime,Pages,Remark,JuanXuHao,TitleFormat,GotTimeSpecial)
values ('"+IDVolume+"','"+IDArchi……
[/Quote]

呃,只能用字符串相加的方式吗?
hinada99 2011-11-14
  • 打赏
  • 举报
回复
string sqlStr="insert into AMArchives(IDVolume,IDArchive,ArchiveID,DutyMan,Title,GotTime,Pages,Remark,JuanXuHao,TitleFormat,GotTimeSpecial) values("+IDVolume+", "+IDArchive+",'"+ ArchiveID +"','"+ DutyMan +"','"+ Title +"',
"+Convert.ToDateTime(GotTime)+")";
mizuho_2006 2011-11-14
  • 打赏
  • 举报
回复
用字符串相加的方式

string insert = @"insert into AMArchives
(IDVolume,IDArchive,ArchiveID,DutyMan,Title,GotTime,Pages,Remark,JuanXuHao,TitleFormat,GotTimeSpecial)
values ('"+IDVolume+"','"+IDArchive+"','"+ArchiveID+"','"+DutyMan+"','"+Title+"',"+Convert.ToDateTime(GotTime));


或者使用参数的方式也可以
linkkee 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]

GotTime date,

多,
[/Quote]
那儿是我复制的时候复制多了,问题不在那儿哈
阿非 2011-11-14
  • 打赏
  • 举报
回复
GotTime date,

多,

110,560

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧