通过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编程的话,示例代码如下:
代码并不复杂,先用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")代替,用字符串解析的方法得到年月日以及时分秒时间。
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")代替,用字符串解析的方法得到年月日以及时分秒时间。
相关文章推荐
- 通过JDBC访问Sybase ASE 15.5数据库
- Sybase ASE数据库使用ADO.net访问存储过程方法详解
- Sybase ASE数据库使用ADO.net访问存储过程方法详解
- 通过ADO.NET访问数据库
- VC++中ADO方式访问数据库datetime字段(不带毫秒时间与带毫秒时间)
- vs2010 下的ado.net 实体模型创建数据库时datetime 类型的问题
- ADO.net实体框架访问不到数据库最新数据问题
- 【转】ADO.NET连接访问dbf数据库问题
- Com+和数据库访问对象(ADO.Net)的一些问题的研究(2002年12月10日)
- Sybase ASE ADO.NET驱动 乱码问题解决
- 通过ADO.NET访问数据库
- ADO.NET的数据库访问小结
- 使用ado.net访问数据库
- 有关Sybase ASE数据库的几个问题的解答
- 关于ADO.NET连接数据库的问题
- heml Ajax 通过Asp.net访问数据库(以Sql Server为例)
- 数据库访问技术(二)---ADO.NET
- jdbc 通过rs.getString()获取数据库中的时间字段问题
- 关于部署完asp.net程序后不能访问页面也不能连接数据库的问题
- 通过ADO.NET操作数据库