C# Informix db连接和加载到datatable不工作

C# Informix db连接和加载到datatable不工作,c#,asp.net,datatable,connection-string,informix,C#,Asp.net,Datatable,Connection String,Informix,我正在尝试连接到web应用程序中的informix数据库,并根据用户输入的项目代码检索数据,然后将其存储在datatable中。稍后,我想从datatable中获取数据,并将其显示在所选项目的文本框中它是我的连接字符串中的一个odbc连接驱动程序={IBM INFORMIX odbc驱动程序} if (DropDownList4.Text == "***.**.**.**" || DropDownList4.Text == "***.**.**.**" || DropDownList4.

我正在尝试连接到web应用程序中的informix数据库,并根据用户输入的项目代码检索数据,然后将其存储在datatable中。稍后,我想从datatable中获取数据,并将其显示在所选项目的文本框中它是我的连接字符串中的一个odbc连接驱动程序={IBM INFORMIX odbc驱动程序}

    if (DropDownList4.Text == "***.**.**.**" || DropDownList4.Text == "***.**.**.**" || DropDownList4.Text == "***.**.**.**")
{
//string abilene = ConfigurationManager.ConnectionStrings["Abeliene"].ConnectionString.ToString();
 IfxConnection conn = new IfxConnection("User Id=****;Password=****;" +"Host=abkrisc1;Server=abkrisc1;" +"Service=1719;DB=circa119;");
     DataTable Abilene = new DataTable();
     Abilene.Columns.Add("item");
     Abilene.Columns.Add("desc");
     Abilene.Columns.Add("upc");
     Abilene.Columns.Add("itemupc");
     Abilene.Columns.Add("ctyp");
     Abilene.Columns.Add("citg");
     Abilene.Columns.Add("best");
     Abilene.Columns.Add("disp");
     Abilene.Columns.Add("mold");
     Abilene.Columns.Add("csel");
IfxCommand cmd;
cmd = new IfxCommand("Select t_item,t_idsc,t_upct,t_item_upc,t_ctyp,t_citg,t_best,t_disp,t_mold,t_csel from tsckcm907 where t_item = @item'");
     conn.Open();
  cmd.Parameters.Add("@item", IfxType.VarChar).Value = TxtItem.Text;
          try
              {
          IfxDataReader myreader = cmd.ExecuteReader();
          Abilene.Load(myreader);
          Response.Write(Abilene.Columns);
          con = true;     
              }
         catch (Exception ex)
              {
               throw ex;
               con = false;
              }
        if (con == true)
                {
                    while (Abilene.Rows.Count > 0)
                    {
                        TxtItem.Text = Abilene.Rows[0]["item"].ToString();
                        lbldesc.Text = Abilene.Rows[1]["desc"].ToString();
                    }
                }
调试时遇到的错误是在conn.open()->error[HY000][Informix.NET provider][Informix]服务器abkrisc1在sqlhosts中未作为dbserver名称列出


我用sql数据库做过类似的场景,但从未使用过informix。如果有人能帮我编写这段代码,那就太棒了,甚至我使用的这段代码都是从ibm网站上找到的。

检查您的informix服务器配置(正如错误所述,问题可能出在您的配置中),它应该包含名为abkrisc1的服务器,监听端口1719


如果没有问题,请检查您的DSN配置(这可能因您的操作系统而异-请检查以了解详细信息)。

internet中的文档和错误消息具有误导性。 我也犯了同样的错误,同时我发现了如何解决它

安装Informix Client SDK for Windows并使用Informix的ODBC驱动程序(带或不带.NET)时,必须传递以下参数:

  • 主人
  • 服务器
  • 服务或港口
  • 协议
  • 用户ID
  • 密码
  • 所有这些参数都是强制性的。数据库是可选的

    连接字符串中缺少协议。如果缺少任何参数,OBDC驱动程序将在注册表中的

    32位驱动程序: HKLM\Software\Wow6432Node\Informix\SQLHOSTS\Servername

    64位驱动程序: HKLM\Software\Informix\SQLHOSTS\Servername

    如果服务器未在此处列出,则会出现错误“服务器XYZ未在sqlhosts中作为dbserver名称列出。

    请注意,只有Linux使用sqlhosts文件。在Windows上,相同的数据存储在注册表中

    您不需要创建sqlhosts文件,尽管错误消息、文档和多个网页让您想到了这一点

    您不需要使用IBM工具SetNet32为服务器生成条目

    您只需将所有必需的参数传递给ODBC驱动程序,错误就消失了


    IBM无法给出更智能的错误消息,这真是一件令人遗憾的事。

    这个答案肯定是错误的。问题不是sqlhosts文件(顺便说一句,它不在Windows上使用)