读书人

.NET 操作 Informix 库的 随机异常

发布时间: 2012-02-21 16:26:23 作者: rapoo

.NET 操作 Informix 库的 随机错误.
我们用的.NET 2.0 + OpendLink ODBC Driver (5.2 版本) 读写Informix 库某一个表,同样的SQL 语句总是随机性地出现错,大约十次有一次出错,已经排除SQL语法和数据库约束这类错误,目前我们把错误定位在OpendLink ODBC Driver 本身的Bug或配置不当上.

主要代码如下:

System.Data.Odbc.OdbcConnection _connection
......
......

_connection = new System.Data.Odbc.OdbcConnection( "FILEDSN=myDSN;Uid=root;Pwd=; ");
_connection.Open();

......
......
System.Data.Odbc.OdbcCommand command = new System.Data.Odbc.OdbcCommand( "DELETE FROM cmstbls WHERE tabname = 'AAA ' AND colname = 'BBB '; ");

command.Connection = _connection ;
command.CommandType = CommandType.Text;
command.UpdatedRowSource = UpdateRowSource.None;
command.ExecuteNonQuery();

DSN配置如下:

[ODBC]
DRIVER=OpenLink Generic ODBC Driver
UID=root
SqlDbmsName=
FetchBufferSize=60
UseSSL=No
NoLoginBox=No
DeferLongFetch=No
ReadOnly=No
Options=192.168.10.18
Database=CMS
ServerType=Informix 2000
Host=192.168.10.18:5000
Server=OpenLink

随机出的错误有两种,看着都很不合理:

1. System.Data.Odbc.OdbcException: ERROR [42000] [OpenLink][ODBC][Informix Server]A syntax error has occurred. (-201)
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
at TestOpenLinkDirver.Form1.btnRunCommand_Click(Object sender, EventArgs e) in C:\Working\Interaction Data Service\TestOpenLinkDirver\Form1.cs:line 69

2. System.Data.Odbc.OdbcException: ERROR [HY000] [OpenLink][ODBC][Informix Server]An illegal character has been found in the statement. (-202)
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
at TestOpenLinkDirver.Form1.btnRunCommand_Click(Object sender, EventArgs e) in C:\Working\Interaction Data Service\TestOpenLinkDirver\Form1.cs:line 69


我的问题:

1. 有没有朋友也出现过类似的错误?是不是这个OpendLink ODBC Driver 本身的Bug?

2. 如果不用OpendLink ODBC Driver ,有哪些其它的Driver 对Informix 的操作比较可靠,建议一下.


请在此方面有经验的朋友指点下,多谢.

[解决办法]
1. System.Data.Odbc.OdbcException: ERROR [42000] [OpenLink][ODBC][Informix Server]A syntax error has occurred. (-201)
==========
提示语法错误,再次检查 SQL 语句

2. System.Data.Odbc.OdbcException: ERROR [HY000] [OpenLink][ODBC][Informix Server]An illegal character has been found in the statement. (-202)
===========
非法字符?SQL 语句中出现 关键字?保留字?乱码?
[解决办法]
关注 ,帮顶了
[解决办法]
在两次sql操作之间加适当延时试试,有时sql失败是因为数据库繁忙导致
[解决办法]
没用过.
[解决办法]
http://blogs.msdn.com/dotnetinterop/archive/2007/05/07/ibm-connects-net-to-informix-databases.aspx
http://www.thescripts.com/forum/thread252275.html
http://uda.openlinksw.com/dotnet/mt/dotnet-informix-mt/
http://www-306.ibm.com/software/data/informix/pubs/library/net_5.html

You want to help the problem !
[解决办法]
没遇到过这种错误
[解决办法]
不是SQL语句问题

感觉是驱动问题

检查一下是否有对象锁定,比如说:在测试时,只用一个用户访问数据库


或者,新建一个表,对新建的表进行操作,看看还有没有问题

读书人网 >Informix

热点推荐