DCSIMG
DEV - שחר.נט

שחר.נט

בלוגים שאני קורא

ספרים מומלצים

Browse by Tags

All Tags » DEV (RSS)
ASP.NET WebMatrix ו- ASP.NET Web Pages בכפית של זהב
מיקרוסופט הודיעה היום על השקת ASP.NET WebMatrix – סביבת פיתוח וריצה חדשה לאתרי אינטרנט. כמובן שיש מ-ל-א פוסטים בנושא, והמטרה בפוסט הזה היא לסכם את הנקודות העיקריות במקום אחד ובנוחות. ASP.NET WebMatrix הוא מוצר די גדול, שמורכב משני חלקים עיקריים: החלק הראשון, הוא סביבת הריצה עצמה. החלק השני, הוא סביבת הפיתוח (שאמנם מומלצת לשימוש, אבל לא חובה לשימוש). סביבת הריצה של ASP.NET WebMatrix סביבת הריצה של ASP.NET WebMatrix מורכבת ממספר חלקים עיקריים: ASP.NET Web Pages דרך חדשה לפיתוח אפליקציות ASP.NET ששונה...
לייצא טבלאות מה DB, כולל סכמה ונתונים מהאפליקציה באמצעות SMO
מה זה SMO? SMO, ר”ת של SQL Server Management Object, זה אוסך של אובייקטים החושפים פונקציונאליות של ניהול שרת SQL Server על רכיביו השונים ובכל הרמות (ניהול שרת, ניהול דטאבייסים, ניהול הרכיבים בדטאבייס מסויים וכו’). מדובר, למעשה, במקבילה דוט.נט-ית לרכיב שידוע בשם SQL-DMO (עוד ד”ת - SQL Distributed Management Objects). האסמבליס (קבצי הDLL) של SMO נמצאים בנתיב C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll (מדובר בקבצים של SQL SERVER 2008, כאשר c:\Program Files זה...
טיפ קצר: למה כשעושים Average על עמודה ב DB מקבלים ממוצע שלם, גם כשהתוצאה אמורה להיות עשרונית?
נניח שיש לכם טבלה, עם עמודה הכוללת מספרים שלמים (int).באפליקציה שלכם, שלצורך העניין, משתמשת נניח ב LINQ to SQL או ADO.NET Entity Framework, אתם רוצים לקבל את הממוצע של העמודה הזאת. אתם אומרים לעצמכם שזה לא אמור להיות מורכב בכלל. יש Extension Method לאגרגרציה של נתונים, אחת מהם היא Average. אתם כותבים אפליקציה פשוטה שמריצה אותה ואמורה לעשות את הממוצע של המספרים 1,1,2. התוצאה המצופה היא אחד ושליש. אתם מקבלים אחד. למה? ההסבר פשוט מאד: משפט ה SQL שנוצר כתוצאה משימוש ב Average משתמש בפונקציית T-SQL בשם...
גרסא חדשה: DTOGenerator – מחולל קוד המייצר Data Transfer Objects על בסיס LINQ to SQL Data Classes ו ADO.NET Entity Framework Model
בפוסט הקודם הצגתי את LINQ2DQLDTOCreator , אפליקציה קטנה שמייצרת Data Transfer Objects על בסיס LINQ to SQL Data Classes. היום ביצעתי קצת שיפורים באפליקציה והרחבתי אותה כך שהיא תייצר DTO’s גם ממודל של ADO.NET Entity Framework . האפליקציה הנוכחית כוללת את כל היכולות של האפליקציה הקודמת. כלומר, עדיין ניתן לייצר DTO’s על בסיס LINQ to SQL Data Classes. אבל, עכשיו האפליקציה גם תייצר DTO’s על בסיס entities, כלומר מחלקות עם EdmEntityTypeAttribute. בנוסף, כאשר עובדים מול ADO.NET Entity Framework האפליקציה...
פרסום: אפליקציית קוד פתוח קטנה ושימושית ליצירת Data Transfer Objects באופן אוטומטי על בסיס LINQ to SQL Data Classes
הקדמה באחד הפוסטים הקודמים כתבתי על Data Transfer Objects והשימוש בהם לעבודה נכונה ונוחה עם LINQ to SQL ו- ADO.NET Entity Framework. בין התגובות שקיבלתי בפורום “תכנות .NET” בתפוז שבתגובה לשאלה שעלתה בו פורסם הפוסט, עלה העניין שלמרות שמדובר בכתיבה יותר נוחה, היא דורשת למעשה עבודה כפולה בהתחלה, וגם ציינתי זאת בפוסט. כשמתחילים לכתוב, יש צורך לכתוב DTO נפרד לכל אחת מהישויות עם תחילת העבודה, וגם בד”כ לכתוב מתודות שמבצעות העברה בין הDTO לאובייקט שנמצא ב DAL (האובייקט שמופה ע”י הORM) ולהיפך – לכתוב מתודה...
טיפ קצר: ייצוא מלא של הנתונים ב DB כולל סכמה ונתונים
אפשרות חמודה שקיימת ב SQL Manegment Studio 2008 היא להגדיר לאופציית ה” GEnerate Scripts” של הדטאבייס גם לייצא את הנתונים (כלומר, לייצר משפטי INSERT לטבלאות). האפשרות הזאת לא קיימת בגרסא 2005 (יש Generate Scripts – אין Data – כלומר שלמדתי על בשרי כשלא הבנתי לאן נעלמה האפשרות), אבל אין שום מגבלה על התקנה ושימוש ב Management Studio 2008 גם מול instance של SQL Server 2005. השימוש העיקרי של האפשרות הזאת, הוא העברת מידע משרתי הפיתוח לפרודקשן כאשר רוצים להעביר טבלאות חדשות מסויימות או אובייקטים חדשים מסויימים...
טיפ קצר: גישה ל Controls הנמצאים ב FooterTemplate של Repeater
בעקבות שאלה שקיבלתי, כמה מילים על FooterTemplate ב Repeater: ה FooterTemplate מאפשר לקבוע תבנית עיצובית שתופיע בתחתית ה Repeater לאחר כל ה DataBound Items. ניתן, כמובן, כמו כל מקום, לשלב שם כל Control שאתם רוצים. וכעת, לשאלה – איך ניגשים אליהם בלי להשתמש באף אחד מה events של ה Repeater? קצת מגושם, לא מורכב. בדוגמא הזאת, נניח של Repeater קוראים rpSample, ל control שאחנו מחפשים קוראים calDate והוא מהסוג Calendar. ככה הקוד ייראה:   Calendar myCal = (Calendar)rpSample.Controls[rpSample.Controls...
טיפ לעבודה מול LINQ to SQL ו- ADO.NET Entity Framework: שימוש ב FactoryMethod כדי לקבל מופע של ה DataContext או ה Entities
כשעובדים מול LINQ to SQL או ADO.NET Entities Framework, אנחנו עובדים הרבה מאד מול אובייקט ה DataContext / Entities. דוגמא מאד נפוצה בדוגמאות ובמדריכים של הטכנולוגיות הללו היא ליצור מופע של המודל בכל מתודה וכל פעם שמשתמשים בו. למשל: 1: public static void Method1() 2: { 3: using (var data = new DataClassesDataContext()) 4: { 5: //Code 6: } 7: } 8: public static void Method2() 9: { 10: using (var data = new DataClassesDataContext()) 11: { 12: //Code 13: } 14: } וכך יש הרבה מתודות, כל אחת עושה new DataClassesDataContext...
יצירת Thumbnail (צלמיות) בקלות
אם רוצים ליצור צלמית של תמונה (גרסא מוקטנת שלה), ניתן כמובן לחתוך אותה באופן ידני. אולם, למי שלא מכיר (והרבה, כנראה, לא מכירים) הפונקציונאליות הזאת כבר מובנת ב BCL במחלקה System.Drawing.Image. השימוש במתודה הזאת, GetThumbnailImage מאד פשוט. הנה לדוגמא קוד של Console Application שיוצר גרסא מוקטנת לכל התמונות בפורמט jpg שבתיקייה: נעבור שנייה על הקוד הזה (שכפי שאתם רואים, הוא להדגמה בלבד): 1: ... 2: using System.Drawing; 3: using System.IO; 4: ... 5:   6: string dir = @"C:\Users\Public\Pictures...
SELECT SCOPE_IDENTIFY() עם LINQ to SQL ו- ADO.NET Entity Framework
כאשר מוסיפים שורה לטבלה המכילה איזושהי עמודה בשם ID שמוגדרת, לצורך העניין, כ Primary Key, פעמים רבות נרצה לקבל מיד אחרי הוספת הרשומה את ה ID שהוקצה לה. באמצעות T-SQL, זה היה נעשה עם SCOPE_IDENTIFY(), בצורה הזאת: 1: SELECT SCOPE_IDENTIFY() AS [NewID] זה היה מגיע לאחר ה INSERT, היינו מקבלים את הID וכולם היו שמחים ומאושרים. היום ראיתי דוגמאת קוד שבה מיד לאחר הוספת השורה ב LINQ to SQL וביצוע SubmitChanges, הולכים לבטלה ושולפים את השורה האחרונה בה כדי לקבל את הID. בסופו של דבר, התהליך הזה מיותר. ברגע...
LINQ to SQL/ADO.NET EF, מודל השכבות ו Data Transfer Objects
בפורום “תכנות .NET” בתפוז, עלה לאחרונה נושא השילוב בין ADO.NET Entity Framework ומודל השכבות. ובאמת, אם נסתכל על הדוגמאות הנפוצות באינטרנט, מאד קל לראות עמודים ששמכילים ב code behind שלהם שאילתות LINQ שמקומם ב DAL ופעולות לוגיות שונות שמקומם ב BLL. בסופו של דבר, יש משהו מאד מפתה בנוחות שעלול לגרום ליצירת קוד מבולגן. אם תחשבו על אפליקציה הבנוייה עפ”י מודל השכבות, מאד ברור לנו מה אמור להיות ב DAL ומה אמור להיות ב BLL ומה אמור להיות בGUI, למשל. אבל, השאלה היא, כשהאפליקציה מתבססת על LINQ to SQL/ ADO...
צ’אט אחד על אחד מבוסס ASP.NET Caching
במסגרת העבודה שלי בסטארטאפסידס , פיתחתי לאחרונה צ’אט אחד על אחד (סגנון gmail, פייסבוק וכו’) המאפשר לרשומים באתר לשוחח אחד עם השני. מי שמכיר את הדוגמאות שנמצאות באינטרנט, בד”כ הנושא ממומש באמצעות שימוש כלשהו ב database, דבר שבאפליקציה שלנו היה בלתי אפשרי, ולכן החלטתי להשתמש במנגנון ה caching של ASP.NET. כתבתי באתר סטארטאפסידס מאמר קצר על מאחורי הקלעים של סידס צ’אט . אתם מוזמנים לקרוא. שחר.
indexOf באינטרנט אקספלורר
אחת הפעולות הכי שימושיות שקיימות על מערכים, היא indexOf (אתה נותן את הערך של הפריט, וקמבל את האינדקס שלו במערך). כרום, פיירפוקס, ספארי  - כל אלה תומכים בפעולה הזאת כמשהו מובנה,במנוע javascript שלהם על אף שהיא לא ב specification הרשמי. אינטרנט אקספלורר, בכל אופן, לא תומך בה. אז מה עושים? יש פיתרון שמסתובב ברשת שלקוח למעשה מהמימוש של מוזילה עבור indexOf, שאפשר להוסיף אותו כ prototype function באקספלורר. הבעייה – מסתבר שזה גורם לעיתים בצורה לא מוסברת לאקספלורר להיתקע. הפיתרון היותר נוח והיותר פשוט...
עבודה עם קובץ trc
כאשר עובדים עם profiler ניתן לייצא את הנתונים (וכך בד”כ עושים) לקובץ trc. במידה ורוצים לעבוד מול קבצי trc בקלות (בלי צורך בכל ה performance tools), ניתן לעבוד מולם באמצעות שאילתות TSQLפשוטות, בדיוק כמו טבלה. לצורך העניין, ניתן להשתמש ב fn_trace_gettable שמקבלת את שם הקובץ ומספר המסמן את כמות הקבצים שצריך לקרוא. לצורך הדוגמא, השאילתה הבאה תחזיר לנו את השאילתה עצמה, שם האפליקציה שהריצה את השאילתה, זמן הפעולה שלה והCPU שצרכה ותמיין לפי הזמן שלקח להריץ כל שאילתה: SELECT textdata,applicationname,duration...
התמודדות עם העלאת תוכן גולשים ברמת הגדרות השרת
בהרבה אתרים, בייחוד אתרים קהילתיים, ניתנת לגולשים באתר אפשרות להעלות קבצים. בין אם זה attacments להודעות פורום, קבצים עם תמונת פרופיל שלהם או מסמכים, יש להכל מכנה משותף – אנחנו נותנים לגולש אפשרות לשים קובץ ב FileSystem של השרת שלנו. כל מתכנת עם ידע בסיסי באבטחה יודע שיש צורך לעשות איזושהי וואלידציה לסוג הקובץ שמועלה, לברר שזה סוג שאנחנו מוכנים לקבל. אבל, תמיד כדאי לנקוט כמה צעדי ביטחון נוספים, למקרה שאיכשהו הייתה בעייה, הוואלידציה לא הייתה תקינה, יש פירצת אבטחה באפליקציה אחרת בשרת שמאפשרת איכשהו...
More Posts Next page »