שאלה למפתחי WINCE בסביבת .NET

התמ-ים

New member
שאלה למפתחי WINCE בסביבת .NET

אם יש כאן כאלה. בקשר לבסיס הנתונים SQLCE בסביבת VS2003. איך אתם מתגברים על האיטיות בטעינת קבצים אל תוך בסיס הנתונים? בסביבת VS2003 אין BULK INSERT או מנגנון מובנה לטעינת כמות רשומות גדולה (את הביצועים שלו בסביבת 2005 לא בדקתי). ביצוע אלפי פקודות INSERT לוקח דקות רבות. אני משער שאני לא הראשון ולא האחרון שנתקל בבעיה הזאת.
 

omni96

New member
קצת לא הבנתי אבל אני אנסה

הנתונים לא נשמרים בזיכרון עד שנעשה COMMIT? או שזה אוטומטי בSQLCE?
 

IdleThought

New member
ביצוע

אלפי פעולות INSERT על כל שרת שהוא יקח לך דקות רבות, אם יש ברשותך שרת SQL רגיל יש באפשרותך לבצע רפליקציה מהשרת הרגיל אל תוך הפוקט פיסי בפרק זמן מאוד קצר נשמעה בעבר טענה שטעינת XML תהיה יותר מהירה מטעינת קובץ טקסט בגלל הפארסר הפנימי, אני בספק אם זה נכון אבל זה לא ייקח לך הרבה לבדוק אם אתה יכול לספק את הנתונים כחלק מההתקנה אז באפשרותך לצרף את קובץ השרת ביחד עם ההתקנה ולחסוך המרות בזמן ריצה למשתמש הערה חשובה : בשרת SQLCE בגרסה 2000 יש פרדיקאטים בשפת SQL ש ל א מומשו למרות מה שרשום לך בדוקומנטציה אז זהירות .. גרסה 2005 היא הרבה יותר חביבית
 

התמ-ים

New member
לא בכל מקום יש לי אפשרות

להתחבר לאיזשהו שרת SQL והממשק בין המערכות הוא ע"י קבצים. למה הכוונה בטעינת XML אל תוך ה SQLCE? איך אני עושה דבר כזה?
 

התמ-ים

New member
ניסיתי טעינה דרך XML

הטעינה הצליחה, כך שאני משער שהיא היתה בצורה נכונה. זה לקח פי 3 מאשר אלפי פעולות INSERT. כאשר 10 אחוז מהמזמן היה הכנה של ה DATASET וה DATATABLE. בקיצור, אני נשאר עם אלפי INSERT ים.
 

IdleThought

New member
אררר

רעיונות נוספים: אם העידכון שלך הוא חד כיווני בלבד והוא מחליף את הקובץ הקיים אז אם אתה משתמש ב SQL2005 אז יש לך אפשרות ליצור על גבי PC קובץ SDF שזה טכנית מסד הנתונים שלך ואתה יכול פשוט להחליף אותו כל פעם שאתה צריך ולהגדיר את החיבור מחדש אם העידכון שלך הוא דיפרנציאלי ( מוסיף על מסד הנתונים שלך ) אז יש בעיה כי אני לא חושב שאפשר לקרוא טבלאות ממסדי נתונים שונים יחדיו אבל בטוח תוכל לטעון DATASET ממסד נתונים אחד ולהכניס אותו לשני עם השאילתות המתבקשות טכניקה נוספת שאני יכול לחשוב עליה היא שתבצע סריאליזציה בינארית של ה DATASET מתוך אמולטור על PC ותבצע דה-סריאליזציה שלו על המכשיר כל הפתרונות האלה יעבדו אבל הם עקומים בטירוף, הדרך היחידה שבה אתה אמור לטעון את מסד הנתונים הוא באמצעות RDA/רפליקציה מתוך שרת SQL דוגמא מתוך MSDN:
string rdaOleDbConnectString = @"Provider=SQLOLEDB; "Data Source=MySqlServer; Initial Catalog=AdventureWorks; User Id=username; Password = <password>"; // Initialize RDA Object // SqlCeRemoteDataAccess rda = null; try { // Try the Pull Operation // rda = new SqlCeRemoteDataAccess( "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll", "MyLogin", "<password>", "Data Source=MyDatabase.sdf"); rda.Pull("Employees", "SELECT * FROM DimEmployee", rdaOleDbConnectString, RdaTrackOption.TrackingOnWithIndexes, "ErrorTable"); // or, try one of these overloads: // // rda.Pull("Employees", "SELECT * FROM DimEmployee", rdaOleDbConnectString, // RdaTrackOption.TrackingOnWithIndexes); // // rda.Pull("Employees", "SELECT * FROM DimEmployee", rdaOleDbConnectString); } catch (SqlCeException) { // Handle errors here // } finally { // Dispose of the RDA object // rda.Dispose(); }​
 
למעלה