इम के लिए इकाई की रूपरेखा का उपयोग कर 4.3 कोड पहले प्रक्रिया जिस तरह से मैं फोन संग्रहीत प्रक्रिया इस तरह है संग्रहीत कॉलिंग:एसक्यूएल पैरामीटर आदेश बदलने पर इकाई फ्रेमवर्क अपवाद फेंकता है?
var parameters = new[]
{
new SqlParameter("member", 1),
**new SqlParameter("Code","0165210662660001"),**
new SqlParameter("PageSize", 1),
new SqlParameter("PageNumber",1)
};
var result = context.Database.SqlQuery<resultClass>(
"mySpName @member, @Code, @PageSize,@PageNumber" parameters).ToList();
यह SqlServer पर निष्पादित हो जाता है और मैं परिणाम मिलता है।
लेकिन अगर मैं इस तरह paramaters का क्रम बदल:
var result = context.Database.SqlQuery<resultClass>("mySpName @Code, @member,@PageSize,@PageNumber" parameters).ToList();
var parameters = new[]
{
**new SqlParameter("Code","0165210662660001"),**
new SqlParameter("Member", 1),
new SqlParameter("PageSize", 1),
new SqlParameter("PageNumber",1)
};
मैं इस तरह एक त्रुटि मिली:
Error converting data type nvarchar to int
संग्रहीत प्रक्रिया इस तरह है:
ALTER PROCEDURE [c].[mySpName]
@Member INT ,
@Code VARCHAR (50) ,
@PageSize INT ,
@PageNumber INT
AS
मुझे यह आदेश क्यों मिलता है? पैरामीटर ऑर्डर रखना महत्वपूर्ण है? मैं क्या कर सकता हूं ताकि मैं पैरामीटर ऑर्डर के बारे में चिंतित किए बिना संग्रहीत प्रक्रिया को कॉल कर सकूं?
============ मैं एक समाधान खोजने के लिए और यह पूरी तरह से काम करता है ============
public class blahContext<T>
{
int i = 0;
public IEnumerable<T> ExecuteStoreQuery(string SPname, SqlParameter[] parameters)
{
using (var context = new CADAContext())
{
string para = string.Join(", ", (from p in parameters
where !"NULL".Equals(p.Value)
select string.Concat(new object[] { "@", p.ParameterName, "={", this.i++, "}" })).ToList<string>());
object[] x = (from p in parameters
where !"NULL".Equals(p.Value)
select p.Value).ToArray<object>();
return context.Database.SqlQuery<T>(SPname + " " + para, x).ToList();
}
}
ऐसा इसलिए है क्योंकि आपने एसपी का आह्वान करते समय पैरामीटर का क्रम बदल दिया - स्पष्टीकरण के लिए नीचे मेरा उत्तर देखें। –