簡體   English   中英

C#OleDBConnection連接到以前的IP?

[英]C# OleDBConnection connecting to previous IP?

我有多個數據庫(超過30個)在診所使用,並通過他們使用的許可軟件自動設置。 因此,每個數據庫都被命名為相同的數據庫,並且使用相同的端口,唯一改變的是IP。 話雖如此,我正在使用以下代碼來嘗試對它們分別運行查詢。 但是,當我更改IP並再次運行腳本時,它從前一台服務器返回結果。

using System;
using System.Diagnostics;
using System.Data.OleDb;

namespace ConnectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (OleDbConnection conn = new OleDbConnection("Provider=SAOLEDB.10;LINKS=tcpip(host=X.X.X.X,PORT=2638);ServerName=EAGLESOFT;Integrated Security = True; User ID = dba; PWD = sql"))
            {
                try
                {
                    conn.Open();

                    using (OleDbCommand cmd = new OleDbCommand("SELECT tran_num, provider_id, tran_date FROM transactions WHERE tran_date LIKE '2015-11-23%'", conn))
                    {
                        using (OleDbDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0}|{1}|{2}", reader.GetValue(0).ToString(), reader.GetValue(1).ToString(), reader.GetValue(2).ToString());
                            }
                        }
                    }
                }
                catch (Exception connerr) { Debug.WriteLine(connerr.Message); }
                conn.Close();
            }
            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }
        }
    }
}

我看不出您為什么會在此獲得以前的結果的任何原因。 您是否同時運行此代碼的多個實例? 您是否每次都在代碼中手動更改IP地址? 我假設“交易”對象是實際表,而不是即時生成的東西?

只需稍作修改,就可以將IP地址作為命令行參數傳遞:

static void Main(string[] args)
{
    string ip, port = null;
    for (int i = 0; i < args.Length; i++)
    {
        if (args[i].StartsWith("/i:"))
            ip = args[i].Substring(args[i].IndexOf(':') + 1);
        else if (args[i].StartsWith("/p:"))
            port = args[i].Substring(args[i].IndexOf(':') + 1);
    }

    // Default the port value to 2638 (since I have no idea if that changes).
    if (string.IsNullOrEmpty(port))
        port = "2638";

    string connStr = string.Format("Provider=SAOLEDB.10;LINKS=tcpip(host={0},PORT={1});ServerName=EAGLESOFT;Integrated Security = True; User ID = dba; PWD = sql", ip, port);
    using (OleDbConnection conn = new OleDbConnection(connStr))
    {
        try
        {
            conn.Open();
            if (conn.State != System.Data.ConnectionState.Open)
                // You could also implement a WHILE loop with a small delay (~1200ms) and try again to open the connection, with a counter to "fail" after a certain number (like 3) of attempts.
                throw new Exception("Unable to open connection to database.");

            using (OleDbCommand cmd = new OleDbCommand("SELECT tran_num, provider_id, tran_date FROM transactions WHERE tran_date LIKE '2015-11-23%'", conn))
            using (OleDbDataReader reader = cmd.ExecuteReader())
                while (reader.Read())
                    Console.WriteLine("{0}|{1}|{2}", reader.GetValue(0).ToString(), reader.GetValue(1).ToString(), reader.GetValue(2).ToString());
        }
        catch (Exception connerr)
        { Debug.WriteLine(connerr.Message); }
        finally
        { conn.Close(); }
    }
    if (Debugger.IsAttached)
    {
        Console.ReadLine();
    }
}

首先(出於測試目的),我可能會嘗試刪除ServerName參數,因為您已經在明確提供IP地址。

因此,您的連接字符串為:

Provider=SAOLEDB.10;LINKS=tcpip(host=X.X.X.X,PORT=2638);Integrated Security = True; User ID = dba; PWD = sql

與ORA文件,DSN等類似,聽起來好像您已為EAGLESOFT配置了服務器別名,該別名可能會覆蓋測試中的IP首選項。

確保更改了EagleSoft和IP。 您必須將IP地址作為arg []傳遞。 如下修改代碼以允許更改IP

           string host = "X.X.X.X";
            string conStr = string.Format("Provider=SAOLEDB.10;LINKS=tcpip(host={0},PORT=2638);ServerName=EAGLESOFT;Integrated Security = True; User ID = dba; PWD = sql", host);
            using (OleDbConnection conn = new OleDbConnection(conStr))
 ​

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM