2012-03-08 37 views
22

Tôi có một tập dữ liệu được gọi là "kết quả" với một vài hàng dữ liệu. Tôi muốn lấy dữ liệu này thành một chuỗi, nhưng tôi không thể tìm ra cách để làm điều đó. Tôi đang sử dụng mã bên dưới:Lấy các giá trị datarow vào một chuỗi?

string output = ""; 
foreach (DataRow rows in results.Tables[0].Rows)  
{ 
    output = output + rows.ToString() + "\n"; 
} 

Tuy nhiên, tôi nghĩ rằng tôi thiếu thứ gì đó vì điều này không hoạt động. Ai đó có thể chỉ cho tôi đi đúng hướng?

+0

Điều gì không hoạt động? Bạn đang nhận được một ngoại lệ ở đâu đó? –

+0

Không có ngoại lệ. Nó chỉ là giá trị của "đầu ra" không phải là ở tất cả những gì tôi đã mong đợi. Nhưng, tôi nghĩ hai câu trả lời dưới đây khiến tôi hướng tới giải pháp đúng. – Kevin

Trả lời

37

Bạn cần chỉ định cột nào của dữ liệu bạn muốn lấy dữ liệu.

Hãy thử như sau:

 StringBuilder output = new StringBuilder(); 
     foreach (DataRow rows in results.Tables[0].Rows) 
     { 
      foreach (DataColumn col in results.Tables[0].Columns) 
      { 
       output.AppendFormat("{0} ", rows[col]); 
      } 

      output.AppendLine(); 
     } 
+0

Jeff, điều này đã làm việc hoàn hảo! Cảm ơn bạn rất nhiều! Tôi đã không sử dụng StringBuilder nhiều, ở tất cả, vì vậy tôi vui mừng khi có cơ hội để đưa nó vào sử dụng ở đây. Cảm ơn mã ví dụ! – Kevin

+0

Bạn rất hoan nghênh, StringBuilder thật tuyệt vời. Được sử dụng để sử dụng nó bất cứ khi nào bạn thấy mình thao tác một chuỗi nhiều lần. – Khan

3

Đối tượng rows của bạn giữ thuộc tính Item nơi bạn có thể tìm thấy giá trị cho từng cột của mình. Bạn không thể mong đợi các cột tự liên kết khi bạn thực hiện một số .ToString() trên hàng. Bạn nên truy cập từng cột từ hàng riêng biệt, sử dụng for hoặc foreach để đi bộ mảng cột.

Ở đây, hãy nhìn vào các lớp:

http://msdn.microsoft.com/en-us/library/system.data.datarow.aspx

+0

Bạn nói đúng, Andrei. Tôi đã quên rằng tôi cũng phải lặp lại các cột trong các hàng. – Kevin

4

Bạn có thể nhận được một giá trị cột bằng cách làm

rows["ColumnName"] 

Bạn sẽ phải biến đổi thành kiểu approperiate .

output += (string)rows["ColumnName"] 
+0

Cảm ơn, Matthew. Cả bạn và Andrei đều đúng về việc cần lấy giá trị của tôi từ cột cho mỗi hàng. Tôi hoàn toàn quên mất điều đó. – Kevin

20

Tôi đã làm điều này rất nhiều bản thân mình. Nếu bạn chỉ cần một danh sách dấu phẩy tách ra cho tất cả các giá trị hàng bạn có thể làm điều này:

StringBuilder sb = new StringBuilder(); 
foreach (DataRow row in results.Tables[0].Rows)  
{ 
    sb.AppendLine(string.Join(",", row.ItemArray)); 
} 

Một StringBuilder là phương pháp ưa thích là chuỗi nối là chậm hơn đáng kể cho một lượng lớn dữ liệu.

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