DataReader值逐行

时间:2016-04-14 11:54:20

标签: c#

我知道我可以使用while (dr.Read()) {...}但是循环我桌子上的每个字段,我想要检索第一行中的所有值,然后是第二行...依此类推。

我们说我有这样一张桌子:

ID--------------Value1--------------Value2------------------Value3
1               hello               hello2                  hello3
2               hi1                 hi2                     hi3
3               hey1                hey2 

我想输出为:hello hi1 hey1

来自以下评论:

标志

SqlCeCommand cmd = new SqlCeCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "Select * From DataLogger1 where Time BETWEEN '"+DateTimePicker.Value+"' AND '"+DateTimePicker1.Value+"' "; 
cmd.Connection = conn1;
conn1.Open(); 
SqlCeDataReader rd= cmd.ExecuteReader(); 
while(rd.Read()) 
{ 
     Globals.Tags.Xarrray[0].Value=rd[2].ToString(); 
     Globals.Tags.Xarrray[1].Value=rd[2].ToString(); 
     Globals.Tags.Xarrray[2].Value=rd[2].ToString(); 
     Globals.Tags.Xarrray[3].Value=rd[2].ToString(); 
     Globals.Tags.Xarrray[4].Value=rd[2].ToString(); 

3 个答案:

答案 0 :(得分:1)

好吧,所以你想要第一个三个记录,它们都来自第二列

  

我想将Value 1列值存储为:textbox1.text = hello   textboxw.text = hi1 textbox3.text = hey1

这样的事情:

using (var reader = myCommand.ExecuteReader()) {
  if (reader.Read()) 
    textbox1.Text = Convert.ToString(reader.GetValue(1)); // hello

  if (reader.Read()) 
    textbox2.Text = Convert.ToString(reader.GetValue(1)); // hi1

  if (reader.Read()) 
    textbox3.Text = Convert.ToString(reader.GetValue(1)); // hey1
}

只需三个 conseq。读取,没有while循环

答案 1 :(得分:0)

获得:

hello hi1 hey1

只是忽略其他列(或者如果你不需要它们就不要选择它们)并且只输出Value1。如果你真的想把它放在同一条线上,不要换线。

答案 2 :(得分:0)

您可以逐行阅读输入,用数据填充一些结构,然后使用linq提取您想要的内容。

您可以定义如下结构:

class Data
{
    public string Id;
    public string Value1;
    public string Value2;
    public string Value3;
}

然后阅读所有数据。

var allData = new List<Data>();
while(dr.Read())
{
    var d = new Data { Id = dr.GetString(0), Value1 = dr.GetString(1), Value2 = dr.GetString(2), Value = dr.GetString(3) };
    allData.Add(d);
}

var result = allData.Select(x => x.Value1);

结果是IEnumerable&lt;字符串&gt;其中包含您的值。然后,您可以使用值执行任何操作。