Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 如何在从SqlDataReader读取变量时定义变量(返回所有行)_C#_Sql Server_C# 4.0_Sqldatareader - Fatal编程技术网

C# 如何在从SqlDataReader读取变量时定义变量(返回所有行)

C# 如何在从SqlDataReader读取变量时定义变量(返回所有行),c#,sql-server,c#-4.0,sqldatareader,C#,Sql Server,C# 4.0,Sqldatareader,我有一个表,其中有14行,我想返回并将每个单元格声明为变量。以下是我尝试过的: using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString)) { SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer]

我有一个表,其中有14行,我想返回并将每个单元格声明为变量。以下是我尝试过的:

using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString))
        {
            SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer] 
            from [MyTable]", conn1);
            conn1.Open();
            using (SqlDataReader reader1 = cmd1.ExecuteReader())
            {
                while (reader1.HasRows)
                {
                    reader1.GetName(0);
                    reader1.GetName(1);

                    while(reader1.Read())
                    {
                        string Question(1) = reader1.GetString(0); //errors here
                        string Answer(1) = reader1.GetString(1); //and here
                    }
                    reader1.NextResult();
                }
            }
}

我希望将声明的变量返回为
Question1
-
Question14
Answer1
-
Answer14
。如何执行此操作?

这里要做的是返回一个对象集合,其中每个对象都有一个
问题
答案
属性


在循环的每次迭代中,您可以创建自定义类型的新实例,该实例已定义为保留这两个值,然后您可以将其添加到所选的数据结构中。

此处要做的是返回一组对象,其中每个对象都有一个
问题
答案
属性


在循环的每次迭代中,您可以创建一个自定义类型的新实例,该实例已定义为保留这两个值,然后您可以将其添加到所选的数据结构中。

如果您想使用14个不同的名称,您可以为问题定义14个字符串变量,为答案定义14个字符串变量。但是,当你有了你的处理列表和其他集合类时,这是一个讽刺

比如说

为你的问题/答案定义一个类

public class QuestionAnswer
{
     public string Question {get;set;}
     public string Answer {get;set;}
}
然后修改代码以创建
列表


最后,我建议您花点时间学习如何使用Gravel先生的回答。

好吧,如果您想使用14个不同的名称,您可以为问题定义14个字符串变量,并为答案定义14个字符串变量。但是当你有自己的列表和其他收集类时,这无疑是可笑的

比如说

为你的问题/答案定义一个类

public class QuestionAnswer
{
     public string Question {get;set;}
     public string Answer {get;set;}
}
然后修改代码以创建
列表


最后,我真的建议你花一点时间来学习如何使用Gravell先生的回答中所示的方法。

你想用动态来做一些这种性质的事情。我还没有测试代码,但从概念上讲,这应该是可行的

public class DynamicDataRecord : DynamicObject 
{
    private IDataRecord _dataRecordFromReader;

    public DynamicDataRecord(IDataRecord dataRecordFromReader) 
    { 
        _dataRecordFromReader = dataRecordFromReader; 
    }

    public override bool TryGetMember(GetMemberBinder binder, out dynamic result) 
    {
        result = _dataRecordFromReader[binder.Name];
        return result != null;
    }
}
然后在你遍历阅读器的地方,你可以做如下的事情

List<DynamicDataRecord> records = new List<DynamicDataRecord>();
using (SqlDataReader reader1 = cmd1.ExecuteReader()) 
{
    foreach(var record in reader)
    {
        records.Add( new DynamicDataRecord(record));
    }
}

你想用一个动态来做这种性质的事情。我还没有测试代码,但从概念上讲,这应该是可行的

public class DynamicDataRecord : DynamicObject 
{
    private IDataRecord _dataRecordFromReader;

    public DynamicDataRecord(IDataRecord dataRecordFromReader) 
    { 
        _dataRecordFromReader = dataRecordFromReader; 
    }

    public override bool TryGetMember(GetMemberBinder binder, out dynamic result) 
    {
        result = _dataRecordFromReader[binder.Name];
        return result != null;
    }
}
然后在你遍历阅读器的地方,你可以做如下的事情

List<DynamicDataRecord> records = new List<DynamicDataRecord>();
using (SqlDataReader reader1 = cmd1.ExecuteReader()) 
{
    foreach(var record in reader)
    {
        records.Add( new DynamicDataRecord(record));
    }
}
我必须在这里给出一个答案。。。显示您正在编写多少不必要的代码

public class QuestionAnswer {
    public string Question {get;set;}
    public string Answer {get;set;}
}
...
var pairs = conn1.Query<QuestionAnswer>("select Question, Answer from MyTable")
       .ToList();
公共课堂问答{
公共字符串问题{get;set;}
公共字符串答案{get;set;}
}
...
var pairs=conn1.Query(“从MyTable中选择问题、答案”)
.ToList();
现在:
成对[0]。问题
是第一个问题,
成对[3]。答案
是第四个答案。

我必须在这里给出答案。。。显示您正在编写多少不必要的代码

public class QuestionAnswer {
    public string Question {get;set;}
    public string Answer {get;set;}
}
...
var pairs = conn1.Query<QuestionAnswer>("select Question, Answer from MyTable")
       .ToList();
公共课堂问答{
公共字符串问题{get;set;}
公共字符串答案{get;set;}
}
...
var pairs=conn1.Query(“从MyTable中选择问题、答案”)
.ToList();

现在:
成对[0]。问题
是第一个问题,而
成对[3]。答案
是第四个答案。

您正好有14个问题,每个问题的答案都在同一行?不可能有更多或更少的问题?@Steve在本测试中不//我希望将声明的变量作为问题1-问题14和答案1-答案14返回。//这不是一个明智的愿望。太变化无常了。你一共有14个问题,每个问题的答案都在同一排?不可能有更多或更少的问题?@Steve在本测试中不//我希望将声明的变量作为问题1-问题14和答案1-答案14返回。//这不是一个明智的愿望。它太易变了。它让我非常高兴,因为其他人也无法想出比
问题答案
更好的名字-命名东西很难!嗯,我甚至没有试过,对我来说唯一更难的是找到按钮的合适图标。这让我非常高兴,其他人也无法想出比
问题答案
更好的名字-命名东西很难!嗯,我甚至没有尝试过,对我来说唯一更困难的是找到按钮的合适图标。行数据从哪里进入
DynamicDataRecord
?行数据从哪里进入
DynamicDataRecord