将参数传递给预言机查询

本文关键字:查询 预言机 参数传递 | 更新日期: 2023-09-27 18:36:56

我正在获取我正在处理的服务器的 IP 地址,然后将检测到的 ip 传递给另一种方法,该方法从表中获取办公室代码 包含每个办公室的列表及其在 Oracle 数据库下的 IP 我传递的问题方法 2 中查询的 IP 请帮助

方法 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();
        }
    }

将参数传递给预言机查询

还不够好

  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();
}