कुछ ट्यूटोरियल के बाद और मैं सफलतापूर्वक एक संग्रह कक्षा बनाने में सक्षम था जो डेटाटेबल बनाने के लिए आवश्यक कार्यक्षमता को प्राप्त करता है जिसे पारित किया जा सकता है एक तालिका मान पैरामीटर के रूप में एक SQL सर्वर की संग्रहीत प्रक्रिया। सबकुछ अच्छी तरह से काम कर रहा है; मैं सभी पंक्तियों को जोड़ सकता हूं और यह सुंदर दिखता है। हालांकि, नज़दीकी निरीक्षण पर मैंने देखा कि जब मैं एक नई पंक्ति जोड़ता हूं, तो पिछली पंक्तियों के लिए डेटा नई पंक्ति के मूल्य के साथ ओवरराइट किया जाता है। तो यदि मेरे पास "foo" के स्ट्रिंग मान के साथ एक पंक्ति है और मैं "बार" मान के साथ दूसरी पंक्ति जोड़ता हूं, तो दूसरी पंक्ति डाली जाएगी (दो पंक्तियों के साथ डेटाटेबल बनाना) लेकिन दोनों पंक्तियों में मूल्य "बार होगा "। क्या कोई देख सकता है कि यह क्यों होगा? यहां कुछ कोड दिया गया है, जो काम करता है लेकिन थोड़ा सा सरल रहा है (स्पष्टीकरण की आसानी के लिए टैग क्लास को कम कर दिया गया है)।सूची में पिछले मानों को ओवरराइट करने के लिए <>
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using Microsoft.SqlServer.Server;
namespace TagTableBuilder
{
public class TagCollection : List<Tag>, IEnumerable<SqlDataRecord>
{
IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator()
{
var sdr = new SqlDataRecord(
new SqlMetaData("Tag", SqlDbType.NVarChar)
);
foreach (Tag t in this)
{
sdr.SetSqlString(0, t.tagName);
yield return sdr;
}
}
}
public class Tag
{
public string tagName { get; set; }
}
}
ये इस प्रकार कहा जाता है:
निम्नलिखित संग्रह वर्ग के है
//Create instance of collection
TagCollection tags = new TagCollection();
//Create instance of object
Tag _tag = new Tag();
foreach (string t in tagList)
{
//Add value to class propety
_tag.tagName = t;
//Add class to collection, this is where all previously added rows are overwritten
tags.Add(_tag);
}
हाँ, क्या मुझे इसे सही तरीके से ठीक करना चाहिए धन्यवाद! –