2016-03-02 3 views
-1

Я получаю IP-адрес сервера, на котором я работаю, затем передавая обнаруженный ip другому методу, который получает офисный код из таблицы, содержит список каждого офиса и его ip под оракульной базой данных. Моя проблема связана с проходя 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"

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

Смежные вопросы