传递参数到oracle查询
问题描述:
我得到我正在工作的服务器的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();
}
}
答
这是不够好
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();
}
感谢您的帮助和解释 – samer