בעיה עם WebService

Zeliran

New member
בעיה עם WebService

יש לי פונקציה ב webSerivce שמנסה להתחבר למסד נתונים ע"י שימוש בקוד הבא:
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("scheduler.mdb").ToString());​
אבל כשאני מנסה להריץ את הפונקציה אני מקבל את השגיאה:
An unhandled exception of type 'System.InvalidOperationException' occurred in system.web.services.dll Additional information: HttpContext is not available. This class can only be used in the context of an ASP.NET request.​
למישהו יש רעיונות למה אפשר לעשות??
 

sharkyM

New member
עושה רושם

שהבעיה לא קשורה לקוד ה-ado.net, איך ה-ws שלך בנוי, ואיך אתה קורא לו ???
 

Zeliran

New member
../images/Emo41.gifשאלה נוספת שקשורה...

ובכן, בסך הכל יש פונקציה אחת שאמורה לקבל DataSet, להוסיף את הטבלאות שהוא מכיל למסד נתונים שאמור להיות מצוי על השרת ולהחזיר מחרוזת ("עבד", "לא עבד") עד עכשיו קיבלתי את אותה השגיאה שפרטתי מקודם.. אבל ניסיתי עכשיו לשנות ב Connection string במקום להשתמש ב Server.MapPath פשוט רשמתי את הכתובת של מסד הנתונים ונראה שהבעיה נפתרה...
וכאן לבעיה אחרת, בניתי תוכנית winForm שעושה שימוש ב webService הזה, הבעיה היא שכאשר אני מריץ אותו אני מקבל את ההודעה שהטבלה שאני מנסה להוסיף כבר קיימת, הגעתי למסקנה שזה קורה בגלל שבמאפיינים של הרפרנס של ה dll של ה webService מסומן true על יד המאפיין Copy Local ולכן אני מאמין שהוא מנסה להוסיף את הטבלה למסד הנתונים הנמצא במחשב ולא ב"שרת" (אני מנסה בינתיים כאשר ה webService גם נמצא על המחשב עצמו..) אבל כשאני מנסה לשים false על המאפיין של Copy Local אני מקבל את השגיאה הבאה כאשר אני מנסה להשתמש ב webService:
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in system.windows.forms.dll Additional information: File or assembly name WSscheduler, or one of its dependencies, was not found.​
ועכשיו אני חושב... וואו.. זאת היתה הודעה ארוכה
 

gilad g

New member
הבעיה היא לא Copy Local

כנראה שהטבלה פשוט קיימת כבר במסד הנתונים... אתה יכול להביא לפה את הודעת השגיאה הראשונה שקיבלת
 

Zeliran

New member
הממ...

כאשר השתמשתי ב Server.MapPath בפונקציה ב webService קיבלתי את השגיאה
An unhandled exception of type 'System.InvalidOperationException' occurred in system.web.services.dll Additional information: HttpContext is not available. This class can only be used in the context of an ASP.NET request.​
ואתה יכול להיות בטוח... הטבלה לא קיימת..
 

gilad g

New member
אני לא מבין...

מה הקשר של השגיאה הזאת? למה החזרת ה-mappath? ביקשתי שתראה לי את השגיאה שאומרת שהטבלה קיימת כבר..
 

Zeliran

New member
אהה..

אז כשאני מנסה להפעיל את ה command אני מקבל פשוט
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll​
אבל אם אני "תופס" את השגיאה אז אני פשוט מקבל את ההודעה:
Table "tableName" already exists​
 

Zeliran

New member
.......

בפונקציה עצמה אני משתמש ב try ו catch ומחזיר את ה exception שמגיעה ל catch
 

Zeliran

New member
בסיסי ביותר...

אתה יודע מה, הנה כל הפונקציה.. אל תסתכל אם היא באמת עובדת כי יתכן מאוד שלא (לא ממש יצא לי לנסות אותה
)
[WebMethod] public string uploadTables(DataSet ds) { OleDbConnection con; con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"scheduler.mdb"); OleDbCommand com = new OleDbCommand(); OleDbDataAdapter adap = new OleDbDataAdapter(); OleDbCommandBuilder custCB; for(int i=0;i<=ds.Tables.Count-1;i++) { com = new OleDbCommand("CREATE TABLE "+ds.Tables.TableName+" (ראשון varchar, שני varchar, שלישי varchar, רביעי varchar, חמישי varchar, שישי varchar, שעה varchar)",con); try { con.Open(); com.ExecuteNonQuery(); adap = new OleDbDataAdapter("SELECT * FROM "+ds.Tables.TableName, con); custCB = new OleDbCommandBuilder(adap); adap.Update(ds); con.Close(); } catch(Exception ex) { return ex.Message; } finally { con.Close(); } } return "העדכון הושלם בהצלחה"; }
 

Zeliran

New member
../images/Emo41.gifעדכון

הבעיה היא שה webService פונה אל מסד הנתונים שנמצא אצל הלקוח ולא אצל השרת כשניסתי להוסיף טבלה שלא קיימת במסד הנתונים אצל הלקוח, היא נוצרה בהצלחה... אבל במסד הנתונים של הלקוח.. איך אפשר לדאוג שה webService יפנה אל מסד הנתונים שבשרת? כרגע ה connectionString הוא:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"scheduler.mdb"​
 

Zeliran

New member
../images/Emo41.gifשאלה נוספת

האם ניתן דרך עמודה של hyperLink שנמצא ב DataGrid להשתמש ב Jscript כדי לפתוח את הקישור בגודל חלון מוגדר מראש?
 

gilad g

New member
כן,

אבל לא דרך עמודת hyperlink. תצטרך להשתמש ב-TemplateColumn:
<Columns> <asp:TemplateColumn> <ItemTemplate> <a href="#" onclick="window.open('<%#DataBinder.Eval(Container.DataItem, "myUrlField")%>')" /> </ItemTemplate> </asp:TemplateColumn> </Columns>​
זה הרעיון בגדול... יכול להיות שיש אי דיוקים קטנים בקוד, כי לא ממש הרצתי/בדקתי אותו
אם לא ברור לך הרעיון של TemplateColumn, אתה תמיד יכול להסתכל ב-MSDN
 

gilad g

New member
...הנה מגיע התיקון: ../images/Emo8.gif

<a href="#" onclick="window.open('<%#DataBinder.Eval(Container.DataItem, "myUrlField")%>');">Click This</a>​
 
למעלה