2013-01-02 9 views
14

में एक ही नाम के साथ 2 एसक्यूएल कॉलम नामों के बीच अंतर करना मैं एक एसक्यूएल क्वेरी में अलग-अलग उपनामों का उपयोग करके दो बार टेबल में शामिल हो गया हूं ताकि मुझे 2 (संभावित रूप से लेकिन हमेशा नहीं) अलग-अलग पता आईडी चुनने में सक्षम बनाया जा सके। पता तालिका में।सी # एसक्यूएलकनेक्शन

SELECT C.court_id, C.court_name, CA.court_address, CA2.court_address... 
FROM court C " + 
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id " + 
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id " + ... 

अब जब उत्पादन करने की कोशिश कर का उपयोग कर ASP.NET सी # इस क्वेरी के परिणामों मैं अनिश्चित Response.Write करने के लिए दो पतों की जो निर्दिष्ट करने के लिए कैसे कर रहा हूँ। उपनाम को कॉलम नाम के सामने रखना (जैसा कि नीचे चौथे स्ट्रिंग मान में) काम नहीं करता है और एक त्रुटि लाता है। क्या सी # में दो पते के बीच अंतर करने का कोई तरीका है, उनके बावजूद डेटाबेस में समान कॉलम नाम दोनों हैं?

SELECT C.court_id, 
    C.court_name, 
    CA.court_address as CACourtAddress, 
    CA2.court_address as CA2CourtAddress 
FROM court C " + 
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id " + 
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id " + ... 

उत्तर

32

आप अपने एसक्यूएल में एक उपनाम का उपयोग करना चाहिए उन्हें अलग करने के लिए, तो आप सही मान देने के लिए सक्षम हो जाएगा यदि आप क्वेरी को संशोधित नहीं कर सकते हैं तो अनुक्रमणिका के माध्यम से कॉलम।

var foo = MyDataReader[0].ToString(); 

या फिर आप अपने एसक्यूएल बयान में AS कीवर्ड का उपयोग क्वेरी को संशोधित कर सकता है।

SELECT foo AS bar FROM Baz 
+0

उत्कृष्ट, धन्यवाद। और विशेष रूप से बहुत तेज़ उत्तर के लिए। एक इलाज किया और मैं उसी सिद्धांत का उपयोग अन्य कॉलम पर कर सकता हूं जिन्हें एक से अधिक बार प्रकट होने की आवश्यकता हो सकती है। –

+0

@ डैनसोलो - एक सार्थक उपनाम का उपयोग करने से जीवन को आसान बनाने में मदद मिलनी चाहिए। उदाहरण के लिए, यदि पहला 'जॉइन' न्यायालय अपील (आईएएनएएलएएल) का पता लगाने के लिए है तो उपनाम के लिए 'सीए 2' की बजाय 'कोर्टऑफ ऐपल्स 'या' कोए 'का उपयोग करें। मैं आम तौर पर स्तंभ उपनाम से तालिका उपनाम को अलग करने के लिए कॉलम उपनामों में एक बिंदु का उपयोग करता हूं, उदा। 'CoA.Court_Name'। – HABO

2

आप पहुंच सकता है:

while (myDataReader.Read()) 
{ 
    string court_id = myDataReader["court_id"].ToString(); 
    string court_name = myDataReader["court_name"].ToString(); 
    string court_address = myDataReader["court_address"].ToString(); 
    string court_postal_address = myDataReader["CA2.court_address"].ToString(); 
    etc..... 

पहले से muchly आपको धन्यवाद

0

bluefeet के रूप में सुझाव दिया गया है स्तंभ नाम उर्फ ​​प्रदान करने के अलावा, एक और तरीका सूचकांक के बजाय सी # में नाम से मूल्यों का उपयोग करने की होगी।

string theValue = myReader[0] as string ?? String.Empty; 

हालांकि, कॉलम के आदेश को कभी भी बदलने की आवश्यकता नहीं है और इस प्रकार सावधानीपूर्वक उपयोग किया जाना चाहिए। साथ ही, यह केवल तभी काम करता है जब आप विशेष रूप से कॉलम को अपने SQL कथन में दिए गए क्रम में नाम से चुनते हैं।

यह SELECT * के लिए काम नहीं कर सकता है, क्योंकि लौटाए गए कॉलम के क्रम SELECT * में तय नहीं किए गए हैं।

+0

मैं खुद को दोहराना जारी रख सकता हूं, लेकिन * डाउनवोट * क्यों? –

+0

डाउनवोट हटा दिया गया है क्योंकि यदि स्थिति इसके उपयोग की गारंटी देती है तो आपका उत्तर एक व्यवहार्य समाधान है। –

3

आप दो कॉलम की तरह एक ही नाम होने भेद करने के लिए अन्य नाम का उपयोग करना चाहिए:

SELECT C.court_id, C.court_name, CA.court_address CourtAddress, CA2.court_address CourtPostalAddress FROM court C 
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id 
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id 

और फिर सी # में आप उन्हें बहुत आसानी से उपयोग कर सकते हैं:

string court_id = myDataReader["court_id"].ToString(); 
string court_name = myDataReader["court_name"].ToString(); 
string court_address = myDataReader["CourtAddress"].ToString(); 
string court_postal_address = myDataReader["CourtPostalAddress"].ToString(); 

मैं इस आशा आपकी समस्या को हल करने में मदद करता है :)

संबंधित मुद्दे