高版本SDK,C#连接ADO.NET连接informix数据库失败!
引用IBM.DATA.informix.dll(2.81.0.0和3.0.0.2版本执行如下代码可以正常连接到数据库)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using IBM.Data.Informix;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
IfxConnection c = null;
try
{
c = new IfxConnection("Server=ontest;Host=10.1.1.14;Service=8888;Protocol=onsoctcp;Database=testdb;UID=user;Password=xxx;CLIENT_LOCALE=zh_CN.GB18030-2000;DB_LOCALE=zh_CN.GB18030-2000;connection timeout=30;connection reset=False");
c.Open();
this.Text = c.Server + " " + c.ServerType + " " + c.ServerVersion;
Clipboard.SetText(this.Text);
//返回ontest Informix 11.50.0000 FC6
}
finally
{
if (c != null && c.State != ConnectionState.Closed) c.Close();
if (c != null) c.Dispose();
c = null;
}
}
}
}
引用IBM.DATA.informix.dll(9.0.0.2或者9.7.4.4版本无法连接上数据库),用如下代码无法连接上数据库
//http://www.ibm.com/developerworks/forums/message.jspa?messageID=14628016 (参考此链接未能解决问题,在Setnet32中已经配置了服务器和客户端的编码集,)
IfxConnectionStringBuilder cb = null;
IfxConnection c = null;
try
{
cb = new IfxConnectionStringBuilder();
cb.Database = "testdb";
cb.Server = "10.1.1.14:8888";
cb.UserID = "user";
cb.Password = "xxx";
cb.Instance="ontest";
c = new IfxConnection(cb.ConnectionString);
c.Open();
}
catch (Exception es)
{
MessageBox.Show(es.ToString());
}
finally
{
if (c != null && c.State != ConnectionState.Closed) c.Close();
c = null;
cb = null;
}
************** 异常文本 **************
IBM.Data.Informix.IfxException: ERROR [08001] [IBM] SQL30081N 检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信 API:"SOCKETS"。检测到错误的位置:"10.1.1.14"。检测到错误的通信功能:"recv"。特定于协议的错误代码:"*"、"*" 和 "0"。 SQLSTATE=08001
在 IBM.Data.Informix.IfxConnPool.Open(IfxConnection connection, String& szConnectionString, IfxConnSettings& ppSettings, Object& ppConn)
在 IBM.Data.Informix.IfxConnection.Open()
在 WindowsApplication1.Form1.button1_Click(Object sender, EventArgs e) 位置 F:\temp\WindowsApplication1\WindowsApplication1\Form1.cs:行号 32
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[最优解释]
[其他解释]
既然高版本不能用,那就只能用低版本了。BTW, SDK版本也应该与数据库服务器版本相匹配才行。
[其他解释]