כותב |
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 04 August 2007 בשעה 20:40 | | IP רשוּם
|
|
|
|
יש לי שתי בעיות שאני ממש לא מצליח לפתור:
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 - ניסיתי כל שינוי אפשרי אך אני לא מצליח לעלות על הבעיות.
תודה מראש :)
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 04 August 2007 בשעה 22:25 | | IP רשוּם
|
|
|
|
1. sql injection כמה אפשר לדבר על זה...
וההסבר שלך לבעיה לא מובן.
2. יכול להיות שה-session ריק.
בכלל הקוד שלך חסר ולידציה...
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 05 August 2007 בשעה 17:23 | | IP רשוּם
|
|
|
|
אני אפרט טיפה יותר, אם אני כותב את המשפט הבא אז הוא עובד ב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.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 August 2007 בשעה 18:01 | | IP רשוּם
|
|
|
|
תעשה למספר .ToString
ולא יזיק גם ולידציה ל-sql אם אתה רואה שמשהו לא עובד.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 05 August 2007 בשעה 19:27 | | IP רשוּם
|
|
|
|
איך עושים ולידציה לSQL?
cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where [MsgID]='" + MsgNumber.ToString() + "' ";
גם לא עובד עם אותה הודעה.. :(
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 August 2007 בשעה 19:36 | | IP רשוּם
|
|
|
|
Response.Write cmdMSG.CommandText
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 05 August 2007 בשעה 19:44 | | IP רשוּם
|
|
|
|
לא הבנתי כלום :(
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 05 August 2007 בשעה 19:49 | | IP רשוּם
|
|
|
|
אולי יש בעיה כי השדה [MsgID] מוגדר כAutoNumber?
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 August 2007 בשעה 19:52 | | IP רשוּם
|
|
|
|
אולי יש בעיה כי שמת את הערך בגרשיים למרות שזה מספר !?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 05 August 2007 בשעה 20:04 | | IP רשוּם
|
|
|
|
cmdMSG.CommandText = " Select [FromMember], [MsgTitle], [Message], [MsgPostDate] From PrivateMsg Where MsgID='" + MsgNumber.ToString() + "' ";
אותה תגובה מצד המחשב.. חשבתי פשוט אולי זאת מילה שמורה או משהו..
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 August 2007 בשעה 21:19 | | IP רשוּם
|
|
|
|
נכון.
לפני המספר שאתה מצרף ל-SQL שמת גרש ועוד אחד אחריו, תוריד אותם.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 06 August 2007 בשעה 01:21 | | IP רשוּם
|
|
|
|
ניסיתי, לא עובד - או שאני לא מבין פה משהו.
כאילו תמיד יוצא אותו error, בבדיקה בsql המשפט מתבצעה נכון והכל עובד, ואם אני כותב את הפקודה עם קבוע כלשהו אז היא עובדת אבל מsession היא לא רוצה להוציא את הנתון.
בדקתי על ידי הדפסה למסך ומה שנמצא בsession הוא הנתון הנכון - אז הבעיה היא שאני לא מצליח להציב את התכולה של session או משתנה כלשהו מסוג string לתוך המשפט.
הבעיה שבמקומות אחרים בקוד זה עובד בסדר גמור, כאילו עשיתי ממש הרבה selectים כאלה ורק כאן המשפט לא עובד. יש למישהו מושג למה? :(
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 August 2007 בשעה 11:59 | | IP רשוּם
|
|
|
|
תשלח את איך שאתה בונה את המשפט עכשיו (לשם שינוי, תקרא את קודי הפורום ותשלח איך ששולחים קוד)
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 06 August 2007 בשעה 12:18 | | IP רשוּם
|
|
|
|
קוד:
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 משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 06 August 2007 בשעה 12:24 | | IP רשוּם
|
|
|
|
בכל המקרים האחרים בקוד שאני מנסה לגשת, אין בעיה.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 August 2007 בשעה 12:43 | | IP רשוּם
|
|
|
|
נו, אמרתי לך להוריד את הגרשיים ולא עשית את זה, בגלל זה זה כאילו אתה מעביר מחרוזת, ולכן יש type mismatch
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 06 August 2007 בשעה 12:54 | | IP רשוּם
|
|
|
|
עשיתי ובכל זאת לא עובד או שלא הבנתי.
קוד:
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() ";
|
|
|
אני פשוט לא מבין למה אתה מתכוון כנראה :(
אם אני מוריד את ה-'" + ... + "' אז הוא לא עובר קומפילציה.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 August 2007 בשעה 13:01 | | IP רשוּם
|
|
|
|
תוריד רק את ה-' לפני ואחרי.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
1crow משתמש פעיל
הצטרף / הצטרפה: 28 April 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 115
|
נשלח בתאריך: 06 August 2007 בשעה 13:45 | | IP רשוּם
|
|
|
|
תודה!! ענק!
|
חזרה לתחילת העמוד |
|
|