में पैरामीटर की अधिकतम संख्या कुछ समय से मैं LINQ के साथ प्रयोग करता हूं। विशिष्ट विधि एक संग्रह के माध्यम से गणना और बदल मेरी कोड में उसके गुण से कुछ विचार करेंगे की तरह करने के लिए:एसक्यूएल क्वेरी
ATDataContext dc = new ATDataContext(Settings.connection_string);
int[] col = ListViewClass.getListViewSelectedPositionTags(listView);
try
{
foreach (var item in col)
{
var ctx = (from r in dc.MailingLists
where r.ID == item
select r).Single();
ctx.Excluded = 'Y';
ctx.ExcludedComments = reason;
}
dc.SubmitChanges();
}
कुछ समय एक से यह करने के लिए एक सलाह मिल गया है ... बहुत समझदारी भरा तरीका है की तरह लगता है:
var ctx = from r in dc.MailingLists
where col.Contains(r.ID)
select r;
foreach (var item in ctx)
{
item.Excluded = 'Y';
item.ExcludedComments = reason;
}
dc.SubmitChanges();
आईट इतने सारे स्तरों पर समझ में आता है और मुझे यह समाधान पसंद है। यह पहले की तुलना में स्मार्ट और तेज है।
मैंने कुछ समय के लिए इस समाधान का उत्पादन वातावरण में उपयोग किया है।
क्या था कुछ ही हफ्तों के बाद मेरे आश्चर्य जब एक आवेदन लॉग फाइल खोज और देखते हैं कि यह:
"भेजे तालिका डेटा स्ट्रीम (टीडीएस) दूरस्थ प्रक्रिया कॉल (RPC) प्रोटोकॉल धारा गलत है बहुत सारे पैरामीटर। इस आरसीपी अनुरोध में प्रदान किए गए थे। अधिकतम 2100 है। "
LINQ एसक्यूएल में धर्मान्तरित where col.Contains(r.ID)
IN
खंड की तरह कुछ के लिए देख रहे हैं:
कहां में आईडी (@ p1, @ p1, @ p2 ...)
से col
संग्रह पर पहुंच गया (मेरे मामले में) और अधिक 2100 तत्व और क्वेरी निष्पादित करने में विफल रही। मैं इस समस्या पर कुछ शोध किया है और क्या मैं समाप्त हो गया है:
"... एसक्यूएल क्वेरी में पैरामीटर की अधिकतम संख्या 2100 अधिक सीमाओं नहीं है, तथ्य यह है कि पूरे क्वेरी स्ट्रिंग लंबा नहीं हो सकता की तरह है 8044 वर्णों से। "
मुझे दूसरा समाधान इतना पसंद आया है। मैं SQL सर्वर की इन हार्ड-कोडित सीमाओं से बहुत निराश हूं।
क्या मुझे कुछ याद आया? क्या "मैं col.Contains (r.ID)" संस्करण का उपयोग करने में सक्षम होने के लिए कुछ भी कर सकता हूं?
सादर मारिउज़
ps। (मैं LINQ और SQL 2005 एक्सप्रेस के साथ विन XP, C# का उपयोग करता हूं)।
क्षमाप्रार्थी। मैं कोड नमूने प्रारूपित करने के लिए प्रबंधन नहीं किया था। अगर कोई मदद कर सकता है तो मैं बहुत सराहना करता हूं ... – Mariusz
स्वरूपित; आप संपादक में ऐसा करने के लिए "कोड" और "उद्धरण" बटन का उपयोग कर सकते हैं। –
आपको बहुत बहुत धन्यवाद। बस अपने दूसरे जवाब के माध्यम से खुदाई। ऐसा लगता है कि यह केक का आसान टुकड़ा नहीं होगा :-) – Mariusz