.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语句问题
感觉是驱动问题
检查一下是否有对象锁定,比如说:在测试时,只用一个用户访问数据库
或者,新建一个表,对新建的表进行操作,看看还有没有问题