עזרה ב ADO .NET עם Dataset

Mas Tool

New member
עזרה ב ADO .NET עם Dataset

שלום לכולם. אני כרגע בשלבי לימוד של ה ADO .NET ונתקעתי בקטע הבא: בServer Explorer יצרתי View שכולל בתוכו שדות של שם לקוח מטבלאת לקוחות, וסכום הזמנות מטבלאת הזמנות. (משהו בסיסי ביותר של Parent To Children Relationship) גררתי את ה View הנ"ל ל Dataset Designer כדי שיצור לי Data Adapter אוטומטי. הבעיה היא שאם אני מציג את הView הזה (שזה בעצם טבלא) בפקד DataGridView ועושה שינויים בנתונים.. אז אני לא מצליח לשמור את זה בחזרה ל Database.. אני יודע שזה בגלל שאין Updata Command ב- Adapter .. אבל אני לא מצליח ליצור אחד כזה שיעדכן את זה כמו שצריך.. הוא נותן שגיאה שלא ניתן לעדכן בגלל שזה מכיל נתונים מיותר מטבלא אחת :( אשמח אם תוכלו לעזור.. או להפנות לחומר מתאים בתודה מראש, מיקי. (מרוב מונחים באנגלית היה עדיף שאכתוב כבר את כל ההודעה באנגלית הא ? :) )
 
הא.

הטריק הוא לעדכן ידנית את פקודות ה update, insert, delete . אתה יכול לשלוף על פי view, אין עם זה בעיה, אבל בדרך כלל אי אפשר לעדכן אותו. לכן, אתה חייב להחליט איזו טבלה בודדת אתה רוצה לעדכן, ולכתוב פקודת עדכון מתאימה, עם הפרמטר המתאים. דוגמה: ה view שלך שולף נתונים מהזמנות ולקוחות? נניח שאתה רוצה לעדכן את טבלת הלקוחות. אז כתוב פקודת עדכון מתאימה. אם אתה מתקשה בזה, תן את מבנה הטבלה, ומה אתה רוצה לעדכן, וננסה לעזור.
 

Mas Tool

New member
ניסיתי.. באמת שכן :)

היי דוד, תודה על התגובה שלך.. ניסיתי את מה שהצעת וזה מה שעשיתי:
SqlCommand cmdUpdateOrders = sqlConnection1.CreateCommand(); cmdUpdateOrders.CommandType = CommandType.Text; cmdUpdateOrders.CommandText = @"UPDATE Orders SET ShipCountry=@ShipCountry WHERE OrderID=@OrderID"; cmdUpdateOrders.Parameters.Add("@ShipCountry",SqlDbType.NChar,10,"ShipCountry"); cmdUpdateOrders.Parameters.Add("@OrderID", SqlDbType.Int, 5, "OrderID"); cmdUpdateOrders.Parameters["@OrderID"].SourceVersion = DataRowVersion.Original; SqlCommand cmdUpdateCustomers = sqlConnection1.CreateCommand(); cmdUpdateCustomers.CommandType = CommandType.Text; cmdUpdateCustomers.CommandText = @"UPDATE Customers SET ContactName=@ContactName, CompanyName=@CompanyName WHERE CustomerID=@CustomerID"; cmdUpdateCustomers.Parameters.Add("@ContactName", SqlDbType.NChar, 10, "ContactName"); cmdUpdateCustomers.Parameters.Add("@CompanyName", SqlDbType.NChar, 10, "CompanyName"); cmdUpdateCustomers.Parameters.Add("@CustomerID", SqlDbType.NChar, 10, "CustomerID"); cmdUpdateCustomers.Parameters["@CustomerID"].SourceVersion = DataRowVersion.Original; SqlDataAdapter daCustomers = new SqlDataAdapter(); daCustomers.UpdateCommand = cmdUpdateCustomers; daCustomers.Update(dsNorthwind1.viewMiky); SqlDataAdapter daOrders = new SqlDataAdapter(); daOrders.UpdateCommand = cmdUpdateOrders; daOrders.Update(dsNorthwind1.viewMiky);​
מבנה הטבלא הוא כך: (הטבלא היא בעצם View)
CustomerID (Customers) CompanyName (Customers) contactName (Customers) OrderID (Orders) ShipCountry(Orders)​
כנראה שאני מפספס משהו.. ואין לי מושג מה.. המון תודה על העזרה, מיקי
 

Mas Tool

New member
שכחתי לרשום מה קורה עכשיו..

מה שקורה כאשר אני מבצע את הפקודות בהודעה הקודמת.. זה שרק טבלא אחת מסוגלת להתעדכן ! והטבלא שמתעדכנת זו הטבלא שה DataAdapter שלה היה ראשון לקרוא ל Update בדוגמא הנ"ל זה daCustomers.. אם אני משנה ב Datagrid גם שם לקוח וגם ארץ משלוח, אז רק השם לקוח משתנה וברגע שאני משנה את הקוד, וקורא ל daOrder.Update לפני daCustomers.Update אז רק הארץ משלוח נשמרת
 
למעלה