2016-03-02 75 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