2011-12-03 34 views
29

Tôi biết tôi có thể sử dụng while(dr.Read()){...} nhưng điều đó lặp lại mọi trường trên bảng của tôi, tôi muốn truy xuất tất cả các giá trị từ hàng đầu tiên, sau đó là thứ hai ... v.v.Làm cách nào để lặp qua các hàng bằng trình đọc dữ liệu trong C#?

Hãy nói rằng tôi có một bảng như thế này:

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

đầu tiên tôi muốn nhận được, hello, hello2hello3 và sau đó đi đến hàng thứ hai và nhận được tất cả các giá trị.

Có cách nào để đạt được điều này không? Tôi hy vọng ai đó hiểu ý tôi.

Tôi rất tiếc, điều này được giải quyết ngay bây giờ. Tôi đã không được mã hóa đúng ...

Và đúng phương pháp SqlDataReader.Read() làm những gì nó được cho là phải làm, một lần nữa sai lầm là của tôi.

+0

Tôi không hiểu ý bạn là gì. Một DataReader đã trả về hàng một hàng tại một thời điểm và bạn có thể truy cập từng cột theo thứ tự bất kỳ, có thể từ hàng đầu tiên đến cuối cùng nếu đó là những gì bạn muốn. Bạn có thể cập nhật câu hỏi của mình để đưa ra một số mã cụ thể, đầu ra mong đợi và đầu ra bạn thực sự nhận được không? – hvd

Trả lời

58

Đó là cách các DataReader công trình, nó được thiết kế để đọc các hàng cơ sở dữ liệu cùng một lúc.

while(reader.Read()) 
{ 
    var value1 = reader.GetValue(0); // On first iteration will be hello 
    var value2 = reader.GetValue(1); // On first iteration will be hello2 
    var value3 = reader.GetValue(2); // On first iteration will be hello3 
} 
0

Thực tế phương pháp Read lặp qua các bản ghi trong tập hợp kết quả. Trong trường hợp của bạn - trên các hàng của bảng. Vì vậy, bạn vẫn có thể sử dụng nó.

24
int count = reader.FieldCount; 
while(reader.Read()) { 
    for(int i = 0 ; i < count ; i++) { 
     Console.WriteLine(reader.GetValue(i)); 
    } 
} 

Lưu ý; nếu bạn có nhiều lưới, sau đó:

do { 
    int count = reader.FieldCount; 
    while(reader.Read()) { 
     for(int i = 0 ; i < count ; i++) { 
      Console.WriteLine(reader.GetValue(i)); 
     } 
    } 
} while (reader.NextResult()) 
+1

Tôi hiểu cách lặp qua trình đọc và nhận tất cả các giá trị, với Console.Writeline (reader.GetValue (I)); điều này hoạt động tốt, tôi cần phải thêm nó vào một mảng làm thế nào để tôi nhận được Mystringarray [I] = reader.GetValue (I) nó chỉ thêm một chỉ số đầu tiên 0 của mảng và không tiếp tục thêm nó vào – shawn

+0

bạn đã bỏ dấu chấm phẩy sau một thời gian (reader.NextResult()) – yogihosting

3

Làm thế nào để lặp qua hàng với một đầu đọc dữ liệu trong C#?

IDataReader. Read() nâng người đọc lên hàng tiếp theo trong kết quả.

while(reader.Read()){ 
    /* do whatever you'd like to do for each row. */ 
} 

Vì vậy, đối với mỗi lần lặp của vòng lặp của bạn, bạn sẽ làm vòng khác, 0-reader. FieldCount, và gọi reader. GetValue(i) cho từng lĩnh vực.

Câu hỏi lớn hơn là loại cấu trúc nào bạn muốn sử dụng để giữ dữ liệu đó?

5

Không có cách nào để có được "toàn bộ hàng" cùng một lúc - bạn cần phải lặp qua các hàng, và cho mỗi hàng, bạn cần phải đọc từng cột riêng biệt:

using(SqlDataReader rdr = cmd.ExecuteReader()) 
{ 
    while (rdr.Read()) 
    { 
     string value1 = rdr.GetString(0); 
     string value2 = rdr.GetString(1); 
     string value3 = rdr.GetString(2); 
    } 
} 

Những gì bạn làm với những chuỗi mà bạn đọc cho mỗi hàng là hoàn toàn tùy thuộc vào bạn - bạn có thể lưu chúng vào một lớp mà bạn đã xác định, hoặc bất cứ điều gì ....

17

Hoặc bạn có thể thử truy cập vào các cột trực tiếp theo tên:

while(dr.Read()) 
{ 
    string col1 = (string)dr["Value1"]; 
    string col2 = (string)dr["Value2"]; 
    string col3 = (string)dr["Value3"]; 
} 
-1

Giả DataTable của bạn có các cột sau thử mã này:

DataTable dt =new DataTable(); 
txtTGrossWt.Text = dt.Compute("sum(fldGrossWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldGrossWeight)", "").ToString(); 
txtTOtherWt.Text = dt.Compute("sum(fldOtherWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldOtherWeight)", "").ToString(); 
txtTNetWt.Text = dt.Compute("sum(fldNetWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldNetWeight)", "").ToString(); 
txtFinalValue.Text = dt.Compute("sum(fldValue)", "").ToString() == "" ? "0" : dt.Compute("sum(fldValue)", "").ToString(); 
0
while (dr.Read()) 
{ 
    for (int i = 0; i < dr.FieldCount; i++) 
    { 
     subjob.Items.Add(dr[i]); 
    } 
} 

để đọc các hàng trong một colunmn

+1

Tôi nghĩ bạn ngụ ý subjob.Items.Add (dr [i]); – WiredEarp

Các vấn đề liên quan