בעיה עם TypedDataDetו-Seeds ב-SQL

ציפי81

New member
בעיה עם TypedDataDetו-Seeds ב-SQL

יש לי פרוייקט מבוסס TypedDataSet. מסד הנתונים הוא SQL Server. התחלתי עם גירסת 2000, עברתי ל-2005 - השאלה נכונה לגבי שתי הגרסאות של מסד הנתונים. הבעיה שלי היא כזו: יש לי מספר טבלאות שהגדרתי את המפתח שלהן כ-Identity. ייבאתי אותן ל-DataSet והן זוהו כ-ReadOnly. הבעיה היא שכל ניסיון להכניס נתונים לטבלאות אלו דרך ה-DataSet (כמובן באמצעות DataBinding ו-TableAdapter) נתקלת בשגיאה - צעקה: כי עמודת המפתח does not allow nulls. בדקתי ב-DataSet ומשפט ה-Insert שנוצר הוא:
Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[tlkupCities] ([CityName]) VALUES (@CityName);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CityID, "& _ "CityName FROM tlkupCities WHERE (CityID = SCOPE_IDENTITY())" Me._adapter.InsertCommand.CommandType = System.Data.CommandType.Text Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@CityName", System.Data.SqlDbType.VarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "CityName", System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))​
כלומר - המשפט אינו דורש את העמודה CityID שהיא עמודת המפתח. איפה, אם כן נוצרת הבעיה שלי? חשוב לציין כי הבעיה חזרה על עצמה בכל הטבלאות שמוגדרות בצורה הנ"ל.
 

EdotK

New member
אני אחסוך לך כמה שבועות של עבודה

ואמליץ לך לרדת מהסיפור של TypedDataSets כבר עכשיו. לא שווה את כאב הראש. פשוט בנוי לא טוב. הבעיה ספציפית כאן היא לא בשאילתא שמורצת מול מסד הנתונים (זה לא SqlException) אלא בזה שה Entity שיוצר הTDS לא מרשה לך להכניס NULL לתוך אחד מהשדות. הClass שיוצר הTDS לא מאפשר להכניס ערך "שגוי" עוד לפני שאת מריצה את השאילתא מול מסד הנתונים. לצערך, הודעות השגיאה של הTDS די קריפטיות ולא ממש מתארות איפה בדיוק נוצרה הבעיה, באיזה שדה בדיוק.. אם את רוצה לעבוד במודל 3 השכבות - זה יפה מאוד, אבל לא עם TDS... תלמדי לעבוד עם CodeSmith ותוכלי לג'נרת את כל הקוד שמייצר לך TDS בעצמך, וכך לא תעבדי עם קופסא שחורה שמפסיקה לעבוד מדי פעם, ולא ממש מסבירה למה.
 

drbunsen

New member
לצערי, מצטרף בחום להמלצה. אני מעדיף

MYGENERATION באופן אישי...
 

ציפי81

New member
זו לא ההתנסות הראשונה שלי ב-N Tier

וכתבתי אובייקטים כאלה בעצמי. מסיבות שונות העדפתי הפעם את ה-TDS. אגב, זה גם לא הפרוייקט הראשון עם TDS אבל הקודם היה מול Access ולכן כנראה כן עבד טוב - אחרי הכל מדובר במסד נתונים קליל לעומת שרת הנתונים SQL. עכשיו אני כבר לא יכולה לוותר על ה-TDS משום שיש לי דד ליין קרוב מידי, ורוב הפרוייקט כבר בנוי - הבעיה שלי קיימת רק בכ-10 טבלאות שרות, כל שאר הטבלאות ממילא בנויות על מפתחות ייחודיים אחרים כגון ת.ז., כך שהבעיה אינה קיימת. באין ברירה אוותר על ה-Seed ופשוט אבצע השמה של המפתח האחרון + 1 עבור כל שורה. ועוד משהו: לטעמי הקוד שמאחורי ה-TDS, מה שנקרא TDS.Designer בנוי מצויין. הבעיה היא באמת ביצירה של החלק הנ"ל.
 

ציפי81

New member
אהבתי את ההגדרה: "קופסה שחורה"

קופסא שחורה שמפסיקה לעבוד מדי פעם, ולא ממש מסבירה למה... היא גם עפה מידי פעם ומוחקת חלקי קוד על דעת עצמה, וזה הרבה יותר גרוע!
 

ציפי81

New member
שאלה לגבי CodeSmith

יותר ויותר אני שונאת את ה-TDS הזה. לא להאמין כמה צרות שהוא עשה לי בשבוע האחרון - וזה לא קשור לשאלה ששאלתי. פשוט, מדי פעם זה עף, ופשוט מוחק חלקים מהקוד של ה-Dataset.deisigner.vb!!! אגב, התעופות האלו קורות לי רק בגירסת האקספרס ולא בגירסה המלאה - ייתכן שיש קשר? בכל אופן, מה שרציתי לשאול: ראיתי באתר של CodeSmith שיש להם גירסת FreeWare. האם היא טובה וניתן להסתפק בה, או שכדאי להשקיע ולקנות את הגרסה העדכנית האחרונה?
 

EdotK

New member
זה בדיוק מה ששבר את גב הגמל אצלי

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