נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
בניית אתרים
RSS UnderWarrior Forums : RSS בניית אתרים
נושא

נושא: OleDB וAsp.net

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 04 August 2007 בשעה 20:40 | IP רשוּם
ציטוט 1crow

יש לי שתי בעיות שאני ממש לא מצליח לפתור:

OleDbCommand cmdSave = new OleDbCommand("UPDATE Tenders SET [TValue] = '" + TextBoxValue.Text + "', [TArea] = '" + TextBoxArea.Text + "', [TAuthority]='" + TextBoxAuth.Text + "' WHERE [TName] = '" + Session["TName"].ToString() + "' ", conSave);

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

הבעיה השנייה, אני רוצה לקרוא מידע ולזרוק אותו למסך אך משום מה אני לא מצליח:

OleDbConnection conMSG = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/MessageSystem.mdb"));

OleDbCommand cmdMSG = new OleDbCommand();

cmdMSG.Connection = conMSG;

cmdMSG.CommandText = " Select FromMember, MsgTitle, Message, MsgPostDate From PrivateMsg Where MsgID='" + Session["MsgID"].ToString() + "' ";

conMSG.Open();//

OleDbDataReader readerMSG = cmdMSG.ExecuteReader();

if (readerMSG.Read())

{

TextBoxFrom.Text = readerMSG[0].ToString();

TextBoxTitle.Text = readerMSG[1].ToString();

TextBoxMsg.Text = readerMSG[2].ToString();

TextBoxDate.Text = readerMSG[3].ToString();

readerMSG.Close();

conMSG.Close();

}

הטעות שהוא זורק לי היא:

System.Data.OleDb.OleDbException was unhandled by user code
  Message="Data type mismatch in criteria expression."
  Source="Microsoft JET Database Engine"
  ErrorCode=-2147217913
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
       at System.Data.OleDb.OleDbCommand.ExecuteReader()
       at Information_ReadMSG.Page_Load(Object sender, EventArgs e) in d:\Documents and Settings\Ann\My Documents\Visual Studio 2005\WebSites\Tender\Information\ReadMSG.aspx.cs:line 31
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

אם אני משנה את ה'" + Session["MsgID"].ToString() + "' למסספר ID כלשהו אז הוא חוזר לעבוד כמו שצריך אך אני חייב שיקח את הנתון מsession - ניסיתי כל שינוי אפשרי אך אני לא מצליח לעלות על הבעיות.

                תודה מראש :)

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 04 August 2007 בשעה 22:25 | IP רשוּם
ציטוט shoshan

1. sql injection
        כמה אפשר לדבר על זה...

וההסבר שלך לבעיה לא מובן.

2. יכול להיות שה-session ריק.

בכלל הקוד שלך חסר ולידציה...


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 05 August 2007 בשעה 17:23 | IP רשוּם
ציטוט 1crow

אני אפרט טיפה יותר, אם אני כותב את המשפט הבא אז הוא עובד ב100 אחוז:

cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where [MsgID]=35 ";

אך אם אני כותב תצריף של שתי משפתים הבאים אז זה לא יעבוד, למה?

int MsgNumber = 35;

cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where [MsgID]='" + MsgNumber + "' ";

למה? ניסיתי לתת לו input בכל צורה אפשרית והוא מקבל את זה כקבוע רק בצורה הראשונה וזה לא עוזר לי בכלום :(

הerror שיוצא לי הוא:

Data type mismatch in criteria expression.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.OleDb.OleDbException: Data type mismatch in criteria expression.

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 05 August 2007 בשעה 18:01 | IP רשוּם
ציטוט shoshan

תעשה למספר .ToString

ולא יזיק גם ולידציה ל-sql אם אתה רואה שמשהו לא עובד.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 05 August 2007 בשעה 19:27 | IP רשוּם
ציטוט 1crow

איך עושים ולידציה לSQL?

cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where [MsgID]='" + MsgNumber.ToString() + "' ";

גם לא עובד עם אותה הודעה.. :(

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 05 August 2007 בשעה 19:36 | IP רשוּם
ציטוט shoshan

Response.Write cmdMSG.CommandText

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 05 August 2007 בשעה 19:44 | IP רשוּם
ציטוט 1crow

לא הבנתי כלום :(
חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 05 August 2007 בשעה 19:49 | IP רשוּם
ציטוט 1crow

אולי יש בעיה כי השדה [MsgID] מוגדר כAutoNumber?

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 05 August 2007 בשעה 19:52 | IP רשוּם
ציטוט shoshan

אולי יש בעיה כי שמת את הערך בגרשיים למרות שזה מספר !?

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 05 August 2007 בשעה 20:04 | IP רשוּם
ציטוט 1crow

cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where MsgID='" + MsgNumber.ToString() + "' ";

אותה תגובה מצד המחשב.. חשבתי פשוט אולי זאת מילה שמורה או משהו..

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 05 August 2007 בשעה 21:19 | IP רשוּם
ציטוט shoshan

1crow כתב:
לא הבנתי כלום :(


נכון.

לפני המספר שאתה מצרף ל-SQL שמת גרש ועוד אחד אחריו, תוריד אותם.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 06 August 2007 בשעה 01:21 | IP רשוּם
ציטוט 1crow

ניסיתי, לא עובד - או שאני לא מבין פה משהו.

כאילו תמיד יוצא אותו error, בבדיקה בsql המשפט מתבצעה נכון והכל עובד, ואם אני כותב את הפקודה עם קבוע כלשהו אז היא עובדת אבל מsession היא לא רוצה להוציא את הנתון.

בדקתי על ידי הדפסה למסך ומה שנמצא בsession הוא הנתון הנכון - אז הבעיה היא שאני לא מצליח להציב את התכולה של session או משתנה כלשהו מסוג string לתוך המשפט.

הבעיה שבמקומות אחרים בקוד זה עובד בסדר גמור, כאילו עשיתי ממש הרבה selectים כאלה ורק כאן המשפט לא עובד. יש למישהו מושג למה? :(

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 06 August 2007 בשעה 11:59 | IP רשוּם
ציטוט shoshan

תשלח את איך שאתה בונה את המשפט עכשיו (לשם שינוי, תקרא את קודי הפורום ותשלח איך ששולחים קוד)

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 06 August 2007 בשעה 12:18 | IP רשוּם
ציטוט 1crow

קוד:

if (!IsPostBack)

{

try

{

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/MessageSystem.mdb"));

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = con;

cmd.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where IDtmp='" + Session["MessageID"].ToString() + "' ";

con.Open();

OleDbDataReader reader = cmd.ExecuteReader();

if (reader.Read())

{

TextBoxFrom.Text = reader[0].ToString();

TextBoxTitle.Text = reader[1].ToString();

TextBoxMsg.Text = reader[2].ToString();

TextBoxDate.Text = reader[3].ToString();

reader.Close();

con.Close();

}

}

catch (System.Exception)

{

TextBoxMsg.Text= e.ToString();

}

}

כאשר בSession נמצא מספר. אם אני מצב בצורה הבאה:

קוד:

cmd.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where IDtmp=35 ";

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

מה הבעיה עם זה?

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 06 August 2007 בשעה 12:24 | IP רשוּם
ציטוט 1crow

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

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 06 August 2007 בשעה 12:43 | IP רשוּם
ציטוט shoshan

נו, אמרתי לך להוריד את הגרשיים ולא עשית את זה, בגלל זה זה כאילו אתה מעביר מחרוזת, ולכן יש type mismatch

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 06 August 2007 בשעה 12:54 | IP רשוּם
ציטוט 1crow

עשיתי ובכל זאת לא עובד או שלא הבנתי.

קוד:

cmd.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where IDtmp=' + Session["MessageID"].ToString() + ' ";

ניסיתי גם אופציות אחרות כגון:

קוד:

cmd.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where IDtmp=Session["MessageID"].ToString() ";

אני פשוט לא מבין למה אתה מתכוון כנראה :(

אם אני מוריד את ה-'" + ... + "' אז הוא לא עובר קומפילציה.

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 06 August 2007 בשעה 13:01 | IP רשוּם
ציטוט shoshan

תוריד רק את ה-' לפני ואחרי.

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
1crow
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 28 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 115
נשלח בתאריך: 06 August 2007 בשעה 13:45 | IP רשוּם
ציטוט 1crow

תודה!! ענק!

חזרה לתחילת העמוד הצג את כרטיס החבר של 1crow חפש הודעות אחרות של 1crow בקר בדף הבית של 1crow
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה