עבור לתוכן

טבלאות לא נשמרות LINQ

Featured Replies

פורסם

משהו מוזר קורה לי, אני מכניס נתונים לטבלת .SQL הנתונים נכנסים (ראו קוד) אבל לא נשמרים. כלומר לאחר שאני סוגר את התוכנה (כלומר את ה vhost), ונכנס לshow table data אני לא רואה שם כלום.

הנה הקוד


DataClasses1DataContext contex = new DataClasses1DataContext();
private void button1_Click(object sender, EventArgs e)
{
contex.Companies.InsertOnSubmit(new Company
{
Name = textBox1.Text
});
contex.SubmitChanges();
textBox2.Text = contex.Companies.First().Name;
}

פורסם

ניסית לדבג את זה ולראות שהשורות האלה מבוצעות ?

לפני שסגרת את ה-HOST, בדקת שהנתון נכנס לטבלה ?

פורסם
  • מחבר

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

פורסם

אוקיי, הסתכלתי שוב על הקוד וזה נראה בסדר.

ניחוש - תנסה ליצור את האובייקט company מחוץ לפונק' InsertOnSubmit ורק אז לשלוח אותו לפונק'

פורסם
  • מחבר

לא עוזר . שיניתי את הקוד כפי שאמרת


DataClasses1DataContext contex = new DataClasses1DataContext();
private void button1_Click(object sender, EventArgs e)
{
Company c = new Company();
c.Name = textBox1.Text;
contex.Companies.InsertOnSubmit(c);
contex.SubmitChanges();
textBox2.Text = contex.Companies.First().Name;
}

וזה לא עוזר. מה שמוזר זה שבתוכנה זה כן נוצר ראה צילומסך מצורף, רק ברגע שאני יוצא מהתוכנה והולך לטבלה לראות אם נשמר, מסתבר שלא.

[attachment deleted by admin]

פורסם

תשמע זה מוזר.

אני עבדתי על פרויקט עם LinqToSql ובאותה צורה שרשמת ולא ניתקלתי בדבר כזה.

כמה דברים שאפשר לנסות:

1. כשאתה בודק את הטבלה כדי לראות אם הרשומה נשמרה - תעשה לפני זה רפרש ל-DB (יש לחצן כזה בחלק העליון של ה-server explorer ) או שתסגור את את הטאב של נתוני הטבלה ותפתח שוב.

אם לא עשית את זה עד עכשיו אז זה בטוח הבעיה.

2. אולי משהו בהגדרות של הטבלה או בכלל ב - SqlServer - איזה שדה הוא המפתח של הטבלה ? האם סימנת את שדה המפתח כ- isIdentity = true כי בקוד אתה לא מכניס ערך לשדה מפתח.

3. בקוד תנסה לשלוף את כל רשומות הטבלה ותציג אותן ב- DataGridView כי יכול להיות שאתה לא מצליח לראות אותן ידנית, למרות שסעיף 1 אמור לפתור את הבעיה הזו.

לא עולה לי עוד רעיון - תנסה ותעדכן אם הבעיה נפתרה. אם לא אז תפרט פה את מבנה הטבלה.

פורסם
  • מחבר

תשמע אני לא יודע להסביר את זה.

עשיתי רפרש אין כלום

השדה שהוא המפתח נקרא ID והוא כמובן isIdentity=true

אני לא יודע איך עובדים עם הDataGridView, הוא לא מציג לי את הlinq[br]פורסם בתאריך: 21.04.2010 בשעה 23:52:40


מבנה הטבלה הוא כך

הטבלה נקראת Company

בה שתי שדות

שדה הprimary key שנקרא ID והוא isIdentity=true

ושדה שנקרא Name שדה varchar שallow nulls (לשדה הזה מקושרת טבלה אחרת בשם Branch)

פורסם

הדרך הפשוטה להוסיף DataGridView במקרה שלנו:

1. בתפריטים למעלה פתח את data וולחץ שם על add new data source

יפתח לך ויזארד ושם תבחר Object ואח"כ תסמן את כל ה- checkbox-ים.

2. תפתח לך חלונית data sources בצד שמאל (אם היא לא נפתחת אז תפתח אותה דרך

Data-> show Data Sources

3. בחלונית תראה את שם הטבלה שלך, תלחץ עליה ותראה כמה אופציות, תבחר DataGridView.

4. תגרור את הטבלה לתוך FORM שלך.

5. תראה שנוסף לך למטה קונטרול בשם MyTableBindingSource שאליו צריך לקשר את הטבלה שלך כדי שהיא תוצג ב- DataGridView .

6. עכשיו תוסיף קוד בסגנון הזה (לטבלה אצלי קוראים Client), שים לב ל - BindingSource וליצירת ה-Context בכל מתודה מחדש.


private void showButton_Click(object sender, EventArgs e)
{
DataClasses1DataContext db = new DataClasses1DataContext();
clientBindingSource.DataSource = db.Clients;
}

private void addButton_Click(object sender, EventArgs e)
{
DataClasses1DataContext db = new DataClasses1DataContext();
Client client = new Client();
client.ClientName = "aman";
client.Address = "bnei-brak";
db.Clients.InsertOnSubmit(client);
db.SubmitChanges();
}

[attachment deleted by admin]

פורסם
  • מחבר

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

פורסם

לדעתי יש איזה בעיה אם ה-LinqToSql אצלך או בדרך שאתה עובד איתה. לפי הקוד שלך זה נראה בסדר חוץ מיצירת אוביקט הקונטקסט שלא ממוקם טוב.

בעיקרון (אני לא יודע עד כמה אתה יודע אז אני אסביר) LinqToSql הוא מתווך בין קוד התוכנית שלך לבין הדטהבייס.

סוג כזה של מתווך נקרא OR-MAPPER ומה שהוא עושה בעצם זה לתת לך ממשק לעבודה עם הדטהבייס בשפת #C במקום בשפת SQL - או במילים אחרות ממיר את הדטהבייס לאובייקטים ב-#C .

הצורה שהוא עובד היא לא כל כך פשוטה ולכן צריך להכיר קצת את הטריקים שלו ואת כללי ה-"עשה ואל תעשה".

הקוד שהעלתי בהודעה הקודמת זה מאפליקציה קטנה שבניתי רק בשביל לנסות את מה שעשית והכל עבד לי כמו שצריך.

אז אולי הקונטקסט שלך לא במקום הנכון וזה הבעיה - מעבר לזה אין לי רעיון.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים