मुझे the Dapper .NET project home page पर निम्न टिप्पणी मिली।डैपर और वर्कर्स
Dapper supports varchar params, if you are executing a where clause on a varchar column using a param be sure to pass it in this way:
Query<Thing>("select * from Thing where Name = @Name", new {Name =
new DbString { Value = "abcde", IsFixedLength = true, Length = 10, IsAnsi = true });
On Sql Server it is crucial to use the unicode when querying unicode and ansi when querying non unicode
मैं एक विरासत डेटाबेस (एसक्यूएल सर्वर 2008), varchar मानकों के साथ संग्रहित प्रक्रियाओं के बहुत सारे के साथ साथ प्रयोग के लिए साफ-सुथरी का मूल्यांकन कर रहा हूँ, और मैं एक छोटे से इस प्रतिबंध से संदेह में हूँ।
हाथ से तैयार किए ADO.NET कोड के साथ, मैं ऊपर क्वेरी के लिए निम्न का उपयोग करेंगे:
new SqlParameter("@Name", "abcde")
को निर्दिष्ट है कि क्या यह यूनिकोड या नहीं, और न ही लंबाई है बिना।
मैं डैप्पर के साथ इस वर्बोज़ DbString वाक्य रचना की आवश्यकता क्यों है, स्तंभ लंबाई, IsFixedLength और IsAnsi को निर्दिष्ट?
क्यों एक वर्चर कॉलम के लिए IsFixedLength = सत्य है (मुझे उम्मीद है कि यह एक char या nchar कॉलम के लिए सच होगा)?
क्या मुझे संग्रहीत प्रक्रिया पैरामीटर के लिए इस तरह डीबीस्ट्रिंग का उपयोग करना है?
मैं अपने DAL कोड अधिक संक्षिप्त बनाने के लिए साफ-सुथरी उम्मीद कर रहा था, लेकिन यह इसे और अधिक varchar मापदंडों के लिए वर्बोज़ बनाने जा रहा है।
अद्यतन
मैं थोड़ा आगे पर गौर किया है, यही कारण है कि साफ-सुथरी इस varchar प्रतिबंध है, जो मैं अपने हाथ से तैयार कोड में है करने के लिए है, जहां मैं आमतौर पर करते हैं प्रकट नहीं होते हैं होता समझने की कोशिश करने के लिए इस प्रकार एक इनपुट पैरामीटर बनाएँ:
var parameter = factory.CreateParameter(); // Factory is a DbProviderFactory
parameter.Name = ...;
parameter.Value = ...;
और आमतौर पर प्रदाता अपने नियम का उपयोग कर, जब तक कि मैं विशेष रूप से यह मजबूर करने के लिए चाहते हैं DbType
अनुमान लगाने के लिए छोड़ दें।
var dbType = param.DbType; // Get dbType and value
var val = param.Value; // from
...
// Coerce dbType to a non-null value if val is not null !!!!!
if (dbType == null && val != null) dbType = SqlMapper.LookupDbType(val.GetType(),name);
...
var p = command.CreateParameter();
...
if (dbType != null)
{
p.DbType = dbType.Value;
}
यानी:
डैप्पर के DynamicParameters
वर्ग को देखते हुए, यह एक तरीका है AddParameters
जो पैरामीटर बनाता है इस प्रकार है यह स्पष्ट रूप से प्रदाता को अपने नियमों का उपयोग करने के बजाय, अपने स्वयं के एल्गोरिदम के साथ दिखने वाले मूल्य के लिए IDataParameter.DbType
को सहारा देता है।
क्या इसके लिए कोई अच्छा कारण है? यह मेरे लिए गलत लगता है, खासकर वर्चर्स पैरामीटर के लिए डैपर के समर्थन के बारे में टिप्पणी के प्रकाश में।
स्टैक ओवरफ़्लो में आपका स्वागत है! कोड केवल उत्तर ही स्वयं पर बहुत उपयोगी नहीं हैं। इससे मदद मिलेगी यदि आप कुछ विवरण जोड़ सकते हैं कि यह कैसे प्रश्न/उत्तर देता है। – SiHa
यह थोड़ा अस्पष्ट सवाल है, लेकिन दूसरों के लिए वर्चर्स और संग्रहीत प्रक्रियाओं का उपयोग करने के लिए पर्याप्त संकेत होना चाहिए। – dbol