首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

高版本SDK,C#连接ADO.NET连接informix数据库失败!解决思路

2013-01-25 
高版本SDK,C#连接ADO.NET连接informix数据库失败!引用IBM.DATA.informix.dll(2.81.0.0和3.0.0.2版本执行如

高版本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版本也应该与数据库服务器版本相匹配才行。
主要想使用高版本sdk中的IBM.Data.Informix.IfxBulkCopy。
且IBM的ids_net_bookmap.pdf标明是支持当前版本的。

如果文档中声明支持,而实际上出错(你确信),可以给他们提交bug了。

热点排行