从XML文件中获取部分连接字符串

时间:2015-01-11 23:01:44

标签: c# xml

我已经尝试根据包含服务器IP地址的XML文件为firebird数据库构建连接字符串。

public class globals
{
    static string _serv;
    public static string serv
    {
        get
        {
            return _serv;
        }
        set
        {
            _serv=value;
        }
    }
    public static XmlDocument xmld = new XmlDocument();

    public static void serv_check()
    {
        xmld.Load("ustawienia.xml");
        globals._serv = xmld.GetElementsByTagName("ip").Item(0).InnerText;
        if (globals._serv.Length<=0)
        {
            MessageBox.Show("Nie zdefiniowano servera");
            Server_Deff sdf = new Server_Deff();
            sdf.ShowDialog();               
        }
    }

    static string db_user = "SYSDBA";
    static string db_pass = "masterkey";

    public static string cstr=
                "User=" + globals.db_user + ";" +
                "Password=" + globals.db_pass + ";" +
                "Database=db_kanc;" +
                "DataSource=" + globals.serv +
                "Port=3050;" +
                "Dialect=3;" +
                "Charset=NONE;" +
                "Role=appka;" +
                "Connection lifetime=15;" +
                "Pooling=true;" +
                "MinPoolSize=0;" +
                "MaxPoolSize=50;" +
                "Packet Size=8192;" +
                "ServerType=0";

    public static FbConnection conn = new FbConnection(globals.cstr);
    public static FbTransaction transaction;


    public static void openConnection() // Open database Connection
    {
    conn.Open();
    transaction = conn.BeginTransaction();
}

由于某些原因,既没有在XML文件中定义IP地址,也没有在它不是变量serv的情况下似乎为空。我可以通过消息框获取值,但不能在连接字符串中获取正确的数据源。

尝试连接到db时遇到这样的错误:

FirebirdSql.Data.FirebirdClient.FbException: Unable to complete network request to host "Port=3050". ---> FirebirdSql.Data.Common.IscException: Unable to complete network request to host "Port=3050".
   w FirebirdSql.Data.Client.Managed.Version10.GdsConnection.Connect()
   w FirebirdSql.Data.FirebirdClient.ClientFactory.CreateManagedDatabase(FbConnectionString options)
   w FirebirdSql.Data.FirebirdClient.ClientFactory.CreateDatabase(FbConnectionString options)
   w FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

public class globals
{
    public static string serv { get; set; }
    // other variables here
}

public static XmlDocument xmld = new XmlDocument();

public static void serv_check()
{
    xmld.Load("ustawienia.xml");
    globals._serv = xmld.GetElementsByTagName("ip").Item(0).InnerText;
    if (globals._serv.Length<=0)
    {
        MessageBox.Show("Nie zdefiniowano servera");
        Server_Deff sdf = new Server_Deff();
        sdf.ShowDialog();               
    }
}

static string db_user = "SYSDBA";
static string db_pass = "masterkey";

public static string cstr = string.Format(
    "User={0};Password={1};Database=db_kanc;DataSource={2};Port=3050;" +
        "Dialect=3;Charset=NONE;Role=appka;Connection lifetime=15;" +
        "Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;" +
        "ServerType=0;",
    globals.db_user,
    globals.db_pass,
    globals.serv);

public static FbConnection conn = new FbConnection(globals.cstr);
public static FbTransaction transaction;

public static void openConnection() // Open database Connection
{
    conn.Open();
    transaction = conn.BeginTransaction();
}

答案 1 :(得分:0)

错误

Unable to complete network request to host "Port=3050"

cstr

的细分
"DataSource=" + globals.serv +
"Port=3050;" +

这意味着globals.serv只是一个空字符串。 根本原因是serv_check()在 cstr 初始化并且 cstr 未更新后运行。

如果您需要更改 globals.serv ,您还需要更新 cstr 或只创建一个新的只读属性(注意&#34 ;;&#34 ;添加DataSource后)

public static string ConnectionString
{
  get
  {
    return "User=" + globals.db_user + ";" +
                "Password=" + globals.db_pass + ";" +
                "Database=db_kanc;" +
                "DataSource=" + globals.serv + ";" +
                "Port=3050;" +
                "Dialect=3;" +
                "Charset=NONE;" +
                "Role=appka;" +
                "Connection lifetime=15;" +
                "Pooling=true;" +
                "MinPoolSize=0;" +
                "MaxPoolSize=50;" +
                "Packet Size=8192;" +
                "ServerType=0";
  }
}

答案 2 :(得分:0)

问题解决了。

public class globals
{
static string db_user = "SYSDBA";
static string db_pass = "masterkey";
public static string host;

    public static XmlDocument xmld = new XmlDocument();

    public static string serv_check()
    {
        xmld.Load("ustawienia.xml");
        host = xmld.GetElementsByTagName("ip").Item(0).InnerText;
        if (host.Length<=0)
        {
            MessageBox.Show("Nie zdefiniowano servera");
            Server_Deff sdf = new Server_Deff();
            sdf.ShowDialog();
        }
        return host;
    }
    public static string serv=serv_check().ToString();


    public static string cstr
    {
        get
        { return
                "User=" + globals.db_user + ";" +
                "Password=" + globals.db_pass + ";" +
                "Database=db_kanc;" +
                "DataSource=" + globals.serv + ";" +
                "Port=3050;" +
                "Dialect=3;" +
                "Charset=NONE;" +
                "Role=appka;" +
                "Connection lifetime=15;" +
                "Pooling=true;" +
                "MinPoolSize=0;" +
                "MaxPoolSize=50;" +
                "Packet Size=8192;" +
                "ServerType=0";
        }
    }

    public static FbConnection conn = new FbConnection(globals.cstr);
    public static FbTransaction transaction;


    public static void openConnection() // Open database Connection
    {
    conn.Open();
    transaction = conn.BeginTransaction();
    }


    public static void closeConnection() // database connection close
    {
        transaction.Commit();
        conn.Close();
    }




    public static int user_id = new int();
    public static int user_r = new int();

}

也许不是最纯粹的解决方案但对我有用:) 谢谢埃里克!