2016-03-02 107 views
-1

我得到我正在工作的服務器的IP地址,然後將檢測到的IP傳遞給另一個從表中獲取辦公室代碼的方法包含每個辦公室和它的IP在Oracle數據庫下的列表我的問題與經過 的IP來查詢方法2,請幫助傳遞參數到oracle查詢

方法1

 private IPAddress Get_CurrentLocalIPAddress() 
    { 
     if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) 
     { 
      MessageBox.Show("Unable to detect IP Address","Network Error",MessageBoxButtons.OK,MessageBoxIcon.Error); 
      return null; 
     } 

     IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); 

     return host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork); 
    } 

方法2

 public void Find_OfficeCode() 
    { 
     string oradb = "User Id=user;Password=pwd;"; 
     string commandStr = @"select DATABASE_NAME from office where UPPER(IP_ADDRESS)=:pOfficeIP"; 

     using (OracleConnection conn = new OracleConnection(oradb)) 
     using (OracleCommand cmd = new OracleCommand(commandStr,conn)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.Add("pOfficeIP", OracleDbType.Varchar2).Value = Get_CurrentLocalIPAddress().ToString(); 

      conn.Open(); 
      IDataReader dr = cmd.ExecuteReader();     
       label3.Text = dr.GetString(dr.GetOrdinal("DATABASE_NAME")).ToString(); 
     } 
    } 

回答

0

這是不夠好

string oradb = "User Id=user;Password=pwd;"; 

你需要添加 「數據源」

string oradb = "Data Source=<XXXXXX>;User Id=user;Password=pwd"; 

在這裏,你不需要 「上」

UPPER(IP_ADDRESS)=:pOfficeIP"; 

因爲這是通常數字和點的IP地址 - 123.345.567.789。而且,即使你需要某種原因,這樣做

UPPER(IP_ADDRESS)=UPPER(:1); 

而當你添加參數 - 做

conn.Parameters.AddWithValue(":1", "my string") 

而且因爲你返回一個值 - 使用ExecuteScalar

string ip = cmd.ExecuteScalar() As string 
if (string.IsNullOrEmpty(ip)). . . . 

或者使用讀者。並且由於您不摘要您的命令或連接,沒有理由摘要讀者

using (OracleDataReader reader = cmd.ExecuteReader()) 
{ 
    if (reader.Read()) 
    { 
     label3.Text = reader[0].ToString(); 
    } 
    if (!reader.IsClosed) reader.Close(); 
}     
+0

感謝您的幫助和解釋 – samer