2010-04-28 19 views
5

के बराबर में असंगत हैं यह मेरा कोडडेटा प्रकार पाठ और nvarchar ऑपरेटर

ProductController.cs

public ActionResult Details(string id) 
{ 
    product productx = productDB.products.Single(pr => pr.Product1 == id); 
    return View(productx); 


} 

Details.aspx

<td> 
     <%-- : Html.ActionLink("Edit", "Edit", new { id=item.Id }) % --> 
     <%: Html.ActionLink("Details", "Details", new { id = item.Product1 })%> 
    </td> 

यह है है एसक्यूएल डेटाबेस से कुछ उत्पादों को सूचीबद्ध करने के लिए मैं क्या उपयोग कर रहा हूं, प्रत्येक उत्पाद को अधिक जानकारी दिखाने के लिए विवरण पृष्ठ का एक लिंक होता है ormations के बारे में यह

क्या इम की कोशिश कर रहा है कि केवल कड़ी में उत्पाद लेबल डाल करने के लिए है यह www.mysite.com \ उत्पादों \ बैटरी (नहीं आईडी)

मैं तैयार की है और की तरह कुछ दिखाने देने के लिए यह काम करना चाहिए, लेकिन यह फेंकता है डेटा प्रकार टेक्स्ट और nvarchar बराबर ऑपरेटर में असंगत हैं। त्रुटि और न (pr => pr.Product1.Equals(id)); काम करता है

त्रुटि स्पष्ट है और मैं पूछ रहा है कि कैसे मैं इसे इस तरह काम करने के लिए क्या करना चाहिए?

धन्यवाद

उत्तर

22

TEXT कॉलम एसक्यूएल सर्वर में बड़े ऑब्जेक्ट डेटा माना जाता है और इसलिए इंडेक्स करने योग्य/खोजा नहीं कर रहे हैं। वे भी बहिष्कृत हैं। तो, वास्तव में, समस्या आपके डेटाबेस में है, न कि आपके आवेदन में।

यदि आप कॉलम प्रकार को varchar(max) पर बदलते हैं, तो आप उसी मात्रा में डेटा डेटा स्टोर कर सकते हैं लेकिन यह समस्या नहीं होनी चाहिए। फिर, अपने लिंक को SQL इकाई में अपडेट करें, और आपको अब यह विशेष त्रुटि नहीं मिलेगी।

कहा करने के बाद कि ... ID नाम के एक स्तंभ नहीं होना चाहिए TEXTयाvarchar(max), यह एक ऑटो वेतन वृद्धि पूर्णांक आईडी या एक GUID (uniqueidentifier) होना चाहिए, ताकि आप अपने डीबी डिज़ाइन को संशोधित कर सकते हैं। लेकिन मानते हैं कि आपके पास आईडी के मनमानी आकार के स्ट्रिंग मान होने के अच्छे कारण हैं, उपर्युक्त परिवर्तन आपको कॉलम पर फ़िल्टर करने की अनुमति देगा।

+0

धन्यवाद! यह इसे वर्चर (अधिकतम) पर सेट करके काम करता है, एक और छोटा सवाल: उत्पादक को वापस करने के तरीके के बारे में, क्या यह एक सर्वोत्तम अभ्यास है? – Hassen

+0

@ मेट्रो: जिस तरह से आप 'उत्पाद' वापस कर रहे हैं ठीक है। लेकिन अगर हम सर्वोत्तम प्रथाओं के बारे में बात कर रहे हैं, तो आपको * वास्तव में * आईडी के लिए एक अलग डेटा प्रकार का उपयोग करने पर विचार करना चाहिए; आप बड़े चरित्र प्रकारों के साथ * प्रमुख * प्रदर्शन समस्याओं में भाग लेंगे। – Aaronaught

0

यह समस्या कर सकते हैं तो होने के लिए उपयोग करें:

उदाहरण

string sql = "Select * from TB_USER where Name = @Name"; 
SqlCommand cmd = new SqlCommand(sql); 

यह असंगत है: के लिए

cmd.Parameters.Add("@Nome", SqlDbType.Text).Value = nome; 

बदलें:

cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = nome; 
संबंधित मुद्दे