C# 如何在从SqlDataReader读取变量时定义变量(返回所有行)
我有一个表,其中有14行,我想返回并将每个单元格声明为变量。以下是我尝试过的: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]
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
?