كيف يمكنني الرجوع إلى عنصر DataRow بالاسم في مجموعة البيانات التي تم استردادها من SQL؟

StackOverflow https://stackoverflow.com/questions/675133

  •  21-08-2019
  •  | 
  •  

سؤال

وهكذا أنا على بناء بعض XML باستخدام XmlWriter وDataSet ولكن عندما يحين الوقت لحلقة من خلال كل DataRow في DataSet أنا لا يمكن معرفة كيف المرجعية مثل "حاليا" و ان هذه العودة من الإجراء المخزن . في التعليمات البرمجية الصفحة أراها القيام به على النحو Eval("userid") أو أيا كان الذي أستخدمه نفس الإجراء المخزن، ولكن أنا استخدامه في ASHX الآن ... رؤية "ما يجري هنا ؟؟" في التعليمات البرمجية أدناه ...

DataSet getData;
getData = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString, CommandType.StoredProcedure, "Course_NewReportGet_Get_Sav", objPAra)

//COUNT NUMBER OF RESULTS FOR COUNT ATTRIBUTE (must add!)

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = ("    ");
using(XmlWriter writer = XmlWriter.Create("data.xml", settings))
{
    writer.WriteStartElement("changes");
    writer.WriteAttributeString("clientname", foundCompany.CompanyName);
    writer.WriteAttributeString("clientid", foundCompany.Abbreviation);
    //writer... INSERT COUNT ATTRIBUTE

    foreach(DataRow dr in getData.Tables)
    {
        writer.WriteStartElement("change");
        writer.WriteStartElement("user");
        writer.WriteAttributeString("userid", dr... WHAT GOES HERE??;                    
    }                
    writer.WriteEndElement();
}
هل كانت مفيدة؟

المحلول

أولا، foreach الخاص بك غير صحيح. تحتاج إلى حلقة على getData.Tables[0].Rows. إذا كان هناك أكثر من 1 الجدول، تحتاج إلى حلقة على getData.Tables.

ولكن، كان الجواب انها خاصية مفهرسة. لذلك، سوف تحصل على dr["userId"] القيمة.

foreach (DataRow dr in getData.Tables[0].Rows) {
   / * blah, blah */
   writer.WriteAttributeString("userId", dr["userId"]);
}

نصائح أخرى

ومن اليسير جدا. سيتم الوصول إليها عمود صحيح في datarow الخاص بك (الدكتور) بما يلي:

int someVal = (int)dr["ColumnName"];

وforeach الداخلي الخاص بك هو القضية.

وينبغي أن يكون

if(getData.Tables.Count > 0){
   foreach(DataRow dr in getData.Tables[0].Rows){
      writer.WriteAttributeString("userid", dr["UserID"]);
   }
}

وأنت تريد الذهاب الى لإضافة مستوى التكرار - كنت بالتكرار حاليا أكثر من الجداول في foreach(DataRow dr in getData.Tables) الخاص بك، والكائنات DataRow هي مستوى واحد أدناه

.
scroll top