我正在获取我正在处理的服务器的IP地址,然后将检测到的ip传递给另一个方法,从表中获取办公室代码包含每个办公室的列表及其在oracle数据库下的ip我的问题与传递 ip到方法2中的查询请帮助
方法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 :(得分: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();
}