Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于同一行的另一列检索列的特定值?_C#_.net_Oracle - Fatal编程技术网

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