将参数传递给oracle查询

时间:2016-03-02 00:06:03

标签: c# oracle

我正在获取我正在处理的服务器的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();
        }
    }

1 个答案:

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