您的位置:首页 > 数据库

通过ADO.NET访问Sybase ASE 15.5数据库datetime字段的小问题

2010-12-09 22:17 701 查看
假设ASE 15.5数据库中存在一张表Talk,表有三个字段Id,Name,Time,类型分别为int,varchar(255),datetime。现在需要往数据库中插入一条记录,使用ado.net编程的话,示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sybase.Data.AseClient;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var conn = new AseConnection("server=127.0.0.1;port=5000;user id=sa;password=;initial catalog=master");
conn.Open();
var command = new AseCommand("insert into Talk(Id,Name,Time) values (@p1,@p2,@p3)", conn);
var param1 = new AseParameter("p1", AseDbType.Integer);
var param2 = new AseParameter("p2", AseDbType.VarChar);
var param3 = new AseParameter("p3", AseDbType.DateTime);
param1.Value = 1;
param2.Value = "EF";
param3.Value = DateTime.Now;
command.Parameters.Add(param1);
command.Parameters.Add(param2);
command.Parameters.Add(param3);
int ret = command.ExecuteNonQuery();
Console.WriteLine(ret);
}
}
}


代码并不复杂,先用AseConnection建立连接,打开连接。然后创建AseCommand,绑定参数。最后执行,打印插入数据的行数,应该得到1。

实际上,代码执行返回的结果是0,查看数据库也发现没有记录被插入。

问题出在DateTime.Now上,可能是因为ASE 15.5相比较15.0在时间格式上做了改动,提高了时间精度,导致Data Provider处理出错。这段代码在访问ASE 15.0.3数据库时运行正常。

在Data Provider修正这个bug之前,至少有两个work around的办法:

1. 使用DateTime.Today代替DateTime.Now,保存年月日时间。

2. 使用DateTime.Parse("2010-12-9 22:22:22")代替,用字符串解析的方法得到年月日以及时分秒时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: