SP וגישה למסד

esakal

New member
SP וגישה למסד

שלום, אני מתכנת בשפה #C במסד נתונים ACCESS. יש לי טופס למילוי פרטים אישיים, הטופס מכיל כ-12 שדות. השאלה שלי מתחלקת ל-2 : SRORED PROCEDURE : * האם להשתמש ב-SP עם 12 ערכים ? * היות וACCESS מחייב הזנת הפרמטרים באותו הסדר שבSP, יכול להווצר בלאגן, האם יש דרך אחרת ? חלוקה לאובייקטים האם כדאי ליצור אובייקט שיכיל את הנתונים השונים כשדות ויישמור את הנתונים של כל שדה ? לדוגמא - עבור השדה "תפקיד" יישמר : סוג - טקסט ערך ברירת מחדל - "אחר" תודה ערן.
 

Zeliran

New member
.....

אהממ.. קודם כל ב Access לא ניתן להשתמש ב SP... וכן, אין לך ממש ברירה מאשר לקבל את 12 הערכים.. (אתה צריך את הערכים.. ו.. זהו..
) לא ממש הבנתי את הקטע עם האובייקטים.. אם אתה שומר את הנתונים לתוך בסיס נתוןנים..אז מה זה נותן לך?
 

esakal

New member
בנוגע לSP באקסס

שלום תודה על התגובה באקסס כן ניתן להשתמש בSP אם כי בצורה יותר מוגבלת. ההבדלים הם שבאקסס : * לא ניתן להשתמש בפרמטר שמחזיר ערך. * חובה להכניס את הפרמטרים בסדר שמופיע בSP. השאלה על האובייקטים היא שאלה כללית יותר. האם כדאי ליצור אובייקט שיכיל את כל הנתונים. מכאן שכל הגישה תהיה לאובייקטים ומערכים של אובייקטים. אפשרות שניה היא להשתמש בDataSet שיכיל את הנתונים. ערן.
 
קצת שאלות שצצו

א-בספר סדנת לימוד של הוד עמי בasp.net הסבירו SP בשתי צורות sqlServer ואקסס , המחבר טעה כשהתייחס לSP באקסס? ב-יש לזה טעם באקסס(יעילות למשל) אם זה רק שאילתת פרמטרים? ג-אז מה נותן SP בכלל?,ואיך יודעים אם זה באמת SP או שזה סתם נראה כך?
 

סומבודי

New member
תשובות

א. לא. SP = שאילתה באקסס. ב. כן. קוד השאילתה מעובד פעם אחת בעת שמירתה. אם תריץ שאילתה מהקוד, היא תעובד בזמן אמת. StoredProcedure כשמו כן הוא. הליך שמור. ג. לפי הצבע. ???
 

סומבודי

New member
ההבדל הוא ביכולות

חוץ מפרמטר החזרה אשר תיארו קודמי, ישנה עוד רשימה ארוכה של יכולות ש-SQL SERVER ודומיו מציעים, אשר אין באקסס. לגבי ג', אתה יכול לקרוא לזה כאוות נפשך. בז'רגון המקצועי של .NET (וגם לפני) השאילתות באקסס מכונות SP.
 

esakal

New member
הפתרון שלי...

שלום, רציתי לשתף אתכם בפתרון שעשיתי בתקווה ויעזור לאנשים נוספים. אחד הדברים שמעצבנים אותי הכי הרבה זה HARD CODE של נתונים שיכולים להשתנות כמו שמות של SP, שמות של פרמטרים. כדי למנוע את זה הייתי יוצר אובייקטים (STRUCTS / CLASSES / CONSTS) שמכילים את הנתונים הללו ובהם הייתי משתמש. בעיה! הרבה יותר מדי קוד. פתרון (שלי, לא מתחייב על יעילות) : 1. יצרתי ATTRIBUTE CLASS שמכיל נתונים שונים על פרמטרים : שם פרמטר, האם מותר שיהיה ריק, ערך ברירת מחדל, תיאור במידה וריק. 2. יצרתי ABSTRACT CLASS שמכיל פונקציות עזר : בדיקה האם כל השדות מלאים כנדרש, יצירת PARAMETER COLLECTION אוטומטית. כיצד זה עוזר ? כל SP מיוצגת באמצעות CLASS אחד שיורש מאובייקט הבסיס שהסברתי למעלה ומגדיר את הATTRIBUTE הרלוונטים לאותו SP. לאחר שהגדרתי פעם אחת החיים קלים. ברגע שאני רוצה לקרוא לSP אני יוצר INSTANCE של האובייקט. צירפתי חלקים מהקוד. ערן. חלקים מה-CLASS ATTRIBUTES :
public enum ValuePattern { All, PositiveNumbers, FullName, Email, Phone} [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method)] public class FieldInfoAttribute : System.Attribute { public int Location; public string ParameterName; public string Description; //public DbType DBType; public ValuePattern Pattern; private object mValueIfNull; public bool AllowNull = false; . . .​
הINTERFACE שעליו מתבסס אובייקט הבסיס :
public interface IStoredProc { string StoredProcName { get;} bool IsValid(out string Message); DataParamCol GetDataParamCol(out string Message); }​
ולסיום אובייקט SP לדוגמא :
public class SPAddPerson : StoredProcBase { [FieldInfo(2,"@FULLNAME",("שם"))] public string FullName; [FieldInfo(1,"@CITY",("עיר"), AllowNull=true, ValueIfNull="אחר")] public string City; [FieldInfo(4,"@PHONE",("טלפון"), AllowNull=true)] public string Phone; [FieldInfo(3,"@PELEPHONE",("פלאפון"))] public string Pelephone; public override string StoredProcName { get { return "spAddPersonEstimate"; } } }​
 
למעלה