C# 如何基于同一行的另一列检索列的特定值?
我需要从数据库表中读取数据。现在我想将数据存储在一个变量中。我需要根据列中包含的值设置条件C# 如何基于同一行的另一列检索列的特定值?,c#,.net,oracle,C#,.net,Oracle,我需要从数据库表中读取数据。现在我想将数据存储在一个变量中。我需要根据列中包含的值设置条件 OracleCommand cmd = new OracleCommand("select user_name,parameter_name,parameter_value from table1 where user_name ='USER'", ocConnection); cmd.CommandType = CommandType.Text;
OracleCommand cmd = new OracleCommand("select user_name,parameter_name,parameter_value from table1 where user_name ='USER'", ocConnection);
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr["PARAMETER_NAME"].ToString() =="NAME1")
{
class1.Value1 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
if ((dr["PARAMETER_NAME"].ToString()) == "NAME2")
{
class1.Value2 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
dr.close();
dr.Dispose();
}
但是这会产生一个错误,因为控件没有进入任何if块。
还提供了一个错误,例如:
System.IndexOutofRangeException
在中找不到指定的列
结果集
尽管值在表中。出于调试目的,您可以在创建读卡器后添加以下行以获取字段名称,这些字段将返回(语句取自): 因此,您可以检查
PARAMETER\u NAME
和PARAMETER\u VALUE
是否会按预期返回。然后你可以进一步调查你的问题
注意:
我建议对OracleCommand
和OracleDataReader
使用using
-语句,这样您就不必显式调用Dispose
。另外,调用dr.Close()
和dr.Dispose()
执行的操作与使用using
-块时不需要执行的操作相同。您还忘了处理OracleCommand
。对于第二个使用
-块,这也是固定的
using(OracleCommand cmd = new OracleCommand("select user_name,parameter_name,parameter_value from table1 where user_name ='USER'", ocConnection))
{
cmd.CommandType = CommandType.Text;
using(OracleDataReader dr = cmd.ExecuteReader())
{
// check column names for debugging purposes
var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();
while (dr.Read())
{
if (dr["PARAMETER_NAME"].ToString() =="NAME1")
{
class1.Value1 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
if ((dr["PARAMETER_NAME"].ToString()) == "NAME2")
{
class1.Value2 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
}
}
}
using(OracleCommand cmd = new OracleCommand("select user_name,parameter_name,parameter_value from table1 where user_name ='USER'", ocConnection))
{
cmd.CommandType = CommandType.Text;
using(OracleDataReader dr = cmd.ExecuteReader())
{
// check column names for debugging purposes
var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();
while (dr.Read())
{
if (dr["PARAMETER_NAME"].ToString() =="NAME1")
{
class1.Value1 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
if ((dr["PARAMETER_NAME"].ToString()) == "NAME2")
{
class1.Value2 = Convert.ToInt32(dr["PARAMETER_VALUE"].ToString());
}
}
}
}