كيف أحصل على قيمة قياسية من بروك المخزنة باستخدام Nettiers
-
04-10-2019 - |
سؤال
لدي إجراء مخزّن بسيط حقًا يشبه هذا:
CREATE PROCEDURE _Visitor_GetVisitorIDByVisitorGUID
(
@VisitorGUID AS UNIQUEIDENTIFIER
)
AS
DECLARE @VisitorID AS bigint
SELECT @VisitorID = VisitorID FROM dbo.Visitor WHERE VisitorGUID = @VisitorGUID
--Here's what I've tried
RETURN @VisitorID 'Returns an IDataReader
SELECT @VisitorID 'Returns an IDataReader
--I've also set it up with a single output
--parameter, but that means I need to pass
--the long in by ref and that's hideous to me
أحاول الحصول على nettiers لإنشاء طريقة مع هذا التوقيع:
public long VisitorService.GetVisitorIDByVisitorGUID(GUID visitorGUID);
في الأساس ، أريد Nettiers Call executesCalar بدلاً من Executereader. ما الخطأ الذي افعله؟
المحلول
لماذا لا تستخدم وظيفة الوصول إلى البيانات المخصصة للاتصال بـ Proc المخزنة مع AcvuutesCalar؟ ((http://nettiers.com/datalayer.ashx#read_methods:_4)
var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");
يجب أن يبدو جسم بروك المخزن:
Select VisitorID
FROM dbo.Visitor
WHERE VisitorGUID = @VisitorGUID
Return
أو
Declare @VisitorId bigint
Set @VisitorId = (
Select VisitorId
From dbo.Visitor
Where VisitorGuid = @VisitorGUID
)
Select @VisitorId
Return
نصائح أخرى
بالنسبة لأولئك الذين يرغبون في القيام بذلك برمجيًا ، لن يعمل المثال أعلاه لأنه لا توجد طريقة لتمرير قيمة المعلمة اللازمة باستخدام أي من تجاوزات هذه الطريقة.
var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");
الطريقة الوحيدة التي وجدتها لإنجاز هذا هي تمرير DBCommand كوسيطة وحيدة لطريقة executescalar:
int myReturnID = 0;
using (SqlCommand cmd = new SqlCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_MyStoredProcedure";
cmd.Parameters.Add(new SqlParameter("MyParameter", myParameter));
myReturnID = (Int32)DataRepository.Provider.ExecuteScalar(cmd);
}
لا تنتمي إلى StackOverflow