2009-11-21 17 views
86

के माध्यम से पुन: प्रयास कैसे करें मुझे DataTable के माध्यम से पुन: प्रयास करने की आवश्यकता है। मेरे पास ImagePath नामक एक कॉलम है।डेटाटेबल

जब मैं DataReader उपयोग कर रहा हूँ मैं इसे इस तरह से कार्य करें:

SqlDataReader dr = null; 
dr = cmd.ExecuteReader(); 
while (dr.Read()) 
{ 
    TextBox1.Text = dr["ImagePath"].ToString(); 
} 

मैं एक ही बात DataTable का उपयोग कर कैसे प्राप्त कर सकते हैं?

+1

डॉ। रीड() नेटवर्क बफर से पंक्ति द्वारा पंक्ति को पंक्ति में पढ़ता है, डेटाबेस से पंक्ति से पंक्ति नहीं। डेटाबेस से केवल एक ही fetch है। इसलिए एक डाटाटेबल से पढ़ना किसी भी प्रदर्शन लाभ की पेशकश नहीं कर रहा है। – developer747

उत्तर

192
DataTable dt = new DataTable(); 

SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

adapter.Fill(dt); 

foreach(DataRow row in dt.Rows) 
{ 
    TextBox1.Text = row["ImagePath"].ToString(); 
} 

... मानता है कि कनेक्शन खुला है और कमांड ठीक से स्थापित है। मैंने वाक्यविन्यास भी नहीं देखा, लेकिन यह आपको विचार देना चाहिए।

+4

+1। आपने मुझे कुछ सेकंड तक हराया :) – shahkalpesh

+0

मान लीजिए कि कोई 'लिनक' समाधान देख रहा है और सोच रहा है कि उपर्युक्त समाधान में '(cmd)' कहां है? – Jogi

+0

@RehanKhan - 'cmd' निष्पादित करने के लिए SQL कमांड होगा। यदि आप LINQ का उपयोग कर रहे हैं, तो आप अपनी LINQ क्वेरी लिखेंगे और अपने परिणाम इस तरह प्राप्त करेंगे। –

23
foreach (DataRow row in myDataTable.Rows) 
{ 
    Console.WriteLine(row["ImagePath"]); 
} 

मैं इसे स्मृति से लिख रहा हूं।
आशा है कि यह आपको ऑब्जेक्ट मॉडल को समझने के लिए पर्याप्त संकेत देता है।

DataTable ->DataRowCollection ->DataRow (जो एक उस पंक्ति के लिए स्तंभ सामग्री के लिए & नज़र उपयोग कर सकते हैं, या तो columnName या क्रमसूचक का उपयोग)।

-> = शामिल है।

14

तुम भी डेटासेट के लिए LINQ एक्सटेंशन का उपयोग कर सकते हैं:

var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath"); 
foreach(string imgPath in imagePaths) 
{ 
    TextBox1.Text = imgPath; 
} 
3

उपरोक्त उदाहरण काफी सहायक होते हैं। लेकिन, अगर हम यह जांचना चाहते हैं कि किसी विशेष पंक्ति का कोई विशेष मूल्य है या नहीं। यदि हां तो हटाएं और तोड़ें और किसी भी कीमत के मामले में सीधे फेंक त्रुटि नहीं मिली है। कोड काम के नीचे:

foreach (DataRow row in dtData.Rows) 
     { 
      if (row["Column_name"].ToString() == txtBox.Text) 
      { 
       // Getting the sequence number from the textbox. 
       string strName1 = txtRowDeletion.Text; 

       // Creating the SqlCommand object to access the stored procedure 
       // used to get the data for the grid. 
       string strDeleteData = "Sp_name"; 
       SqlCommand cmdDeleteData = new SqlCommand(strDeleteData, conn); 
       cmdDeleteData.CommandType = System.Data.CommandType.StoredProcedure; 

       // Running the query. 
       conn.Open(); 
       cmdDeleteData.ExecuteNonQuery(); 
       conn.Close(); 

       GetData(); 

       dtData = (DataTable)Session["GetData"]; 
       BindGrid(dtData); 

       lblMsgForDeletion.Text = "The row successfully deleted !!" + txtRowDeletion.Text; 
       txtRowDeletion.Text = ""; 
       break; 
      } 
      else 
      { 
       lblMsgForDeletion.Text = "The row is not present "; 
      } 
     } 
+0

यह पंक्तियों को हटाने के लिए एक पागल तरीका है !! बस एक एकल TSQL हटाने कथन उत्सर्जित करें! –