ABA


"צריך עזרה | ASP.NET + WEB SERVICES"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #14583 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14583
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   22:00   13.11.08   
אל הפורום  
  צריך עזרה | ASP.NET + WEB SERVICES  
 
   היי,
בדרך כלל אני עובד עם COMMAND BUILDER אבל הפעם נאלצתי לרשום משפטי SQL רגילים לWEB SERVICE.. הבעיה שזה רושם לי היא:

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement.
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.ExecuteNonQuery()
at Service.Insertm(Users user)
--- End of inner exception stack trace ---


הנה הדף בCLIENT-


protected void Button1_Click(object sender, EventArgs e)
{
localhost.Service ms=new localhost.Service();
localhost.Users newuser = new localhost.Users(); //יוצר אובייקט יוזרס ע"י גישה לוואבסרביס
newuser.ID = ms.GetLastUserID();
newuser.Name = nametxt.Text;
newuser.Last_Name = lastnametxt.Text;
newuser.Group = 1;
newuser.Password = passwordtxt.Text;
newuser.Phone = phonetxt.Text;
newuser.Address=addresstxt.Text;
newuser.City = citytxt.Text;

ms.Insertm(newuser);

ActionLabel.Text = "נרשמת בהצלחה חבר";
}

והWEB SERVICE-:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

[WebMethod]
public DataSet Insertm(Users user)
{
string st, my_query;
DataSet ds = new DataSet();
int x;
st = @"provider=Microsoft.jet.oledb.4.0;Data Source = " +
Server.MapPath("~/Data/db6.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = st;
my_query = "Insert Into friendsclients (" + user.ID + "," + "'" +user.Name + "'" + ",'" + user.Last_Name + "','" + user.Phone + "','" + user.Address + "','" + user.Password + "'," + user.Group + ",'" + user.City + "')";
OleDbCommand cmmd = new OleDbCommand(my_query, conn);
conn.Open();
x = cmmd.ExecuteNonQuery();
if (x != 0)
{
string my_quary2 = "Select * From friendsclients";
OleDbCommand cmmd2 = new OleDbCommand(my_quary2, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmmd2);
da.Fill(ds);
}
conn.Close();
return (ds);
}
[WebMethod]
public int GetLastUserID()
{
DataSet ds = new DataSet();
string st = @"provider=Microsoft.jet.oledb.4.0;Data Source = " +
Server.MapPath("~/Data/db6.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = st;
conn.Open();
string my_quary2 = "Select * From friendsclients";
OleDbCommand cmmd2 = new OleDbCommand(my_quary2, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmmd2);
da.Fill(ds);
conn.Close();
if (ds.Tables[0].Rows.Count != 0)
{
return int.Parse(ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1]["friend_id"].ToString())+1;
}
else
{
return 0;
}

}
}

זה עושה לי בעיה כאילו הבעיה בINSERT אבל שמתי BREAK POINT וזה ביכלל לא נכנס לפונקציה Insertm.
X=.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הפקודת INSERT INTO שלך לא נכונה בכלל.. Sn00py  14.11.08 02:07 1
     מחזק... lior066 14.11.08 04:37 2
     וואי תודה! ronen333  14.11.08 12:22 3
         אממ סתם שתדע את המבנה המלא של המשפט INSERT akoka 14.11.08 13:22 4
             כם FIELDS לא חובה אם הוא מתכוון להכניס הכל לפי הסדר. Ice Cold  15.11.08 11:01 5
                 לא תמיד זה נכון , akoka 15.11.08 11:09 6
                     מפתח הוא אף פעם לא מיותר לדעתי, גם אם לא משתמשים בו Ice Cold  16.11.08 22:12 11
             תודה אחי.. לא מכיר את הON DUPLICATE.. ronen333  15.11.08 14:31 7
                 בטח akoka 15.11.08 16:27 8
                     תודה אחי =] ronen333  16.11.08 14:30 9
  אח שלי אני לא יכול שלא להשים לב... lior066 16.11.08 19:34 10
     כנס אחי =] ronen333  17.11.08 13:18 12
         בקשר לID האחרון :S akoka 17.11.08 13:28 13
             אין בעיה בצורה עצמה אלה בי XD ronen333  17.11.08 13:47 14
                 אתה לא יודע מה זה AS בSQL? akoka 17.11.08 14:14 16
                     אמממ ronen333  17.11.08 15:43 18
             אל תתפוס אותי בזה אחי לא השתמשי בזה בחיים lior066 17.11.08 19:26 23
         אביעד... Sn00py  17.11.08 14:09 15
             לירן ronen333  17.11.08 14:15 17
         אממ Sn00py  17.11.08 17:02 19
             כמו תמיד לירן , יצאת תותח =] ronen333  17.11.08 17:15 20
                 Count לא מחזיר לך בכלל אינדקסים Sn00py  17.11.08 18:29 21
                     הדרך שהצגתי לו עם הMAX(id) יותר נוחה:} akoka 17.11.08 19:01 22
                     נוו נכון.. מה זה שונה ממה שאמרתי? ronen333  17.11.08 20:27 25
         פרמטרים זה דרך בטוחה להכניס למסד נתונים.. lior066 17.11.08 19:33 24
             מכתב ronen333  17.11.08 20:38 26
                 ברגע שמחקת את סמפר 500 lior066 17.11.08 23:29 27
                     תודה אחי כנס שניה ronen333  18.11.08 13:58 28
                         יש לך אותו בחתימה שלי :) lior066 18.11.08 20:58 30
                             כן אני יודע אבל לא ידעתי מה הניק אז זה בעיה ronen333  18.11.08 22:45 31
  ניסתי להשים את הPARAMTERS ולא עובד X= ronen333  18.11.08 20:37 29

       
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות, דרג אמינות חבר זה
   02:07   14.11.08   
אל הפורום  
  1. הפקודת INSERT INTO שלך לא נכונה בכלל..  
בתגובה להודעה מספר 0
 
   איפה VALUES? תסתכל על מבנה של פק' INSERT INTO בגוגל.. ותלמד לבצע אותה
ובאופן כללי תשתמש בפרמטרים במקום השרשור של +... יגן עליך בצורה יותר טובה מאינג'קשיונים ודברים כאלה. תקרא OleDbCommand Parameters בגוגל.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   04:37   14.11.08   
אל הפורום  
  2. מחזק...  
בתגובה להודעה מספר 1
 
   חסר לך החלק של VALUES


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   12:22   14.11.08   
אל הפורום  
  3. וואי תודה!  
בתגובה להודעה מספר 1
 
   אני לא מאמין ששחכתי לרשום את זה XD.
תודה רבה על העזרה =]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   13:22   14.11.08   
אל הפורום  
  4. אממ סתם שתדע את המבנה המלא של המשפט INSERT  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 14.11.08 בשעה 13:22 בברכה, akoka
 

INSERT INTO [Table Name] ([Fields]) VALUES ([Fields Value]) [ON DUPLICATE]

הקטע של on duplicate כמובן לא חובה ,זה במקרה ואתה לא משתמש במפתח מוגדר בטבלה שלך ,ויכול ליהיות שייווצר מצב של מפתח כפתור אז אתה יכול להכניס שאילתת UPDATE אחרי הON DUPLICATE ואז להוסיף +1 למפתח שהוכנס.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   11:01   15.11.08   
אל הפורום  
  5. כם FIELDS לא חובה אם הוא מתכוון להכניס הכל לפי הסדר.  
בתגובה להודעה מספר 4
 
לדעתי זו טעות להזין ID, צריך שהשדה הזה יהיה AUTO INCREMENT (או SEED ב-MSSQL), ולא להזין אותו בכלל בשאילתא...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   11:09   15.11.08   
אל הפורום  
  6. לא תמיד זה נכון ,  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 15.11.08 בשעה 11:11 בברכה, akoka
 
יש מקרים שאתה צריך שיהיו לך כפולים רק עם נתון שונה כמו שדה של תאריך ,לוגים ,סטטיסטיקות,נתונים שעברו עריכה ואתה מעוניין לשמור גירסאות ישנות יותר.

מפתח יכול ליהיות סתם מיותר לפעמים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   22:12   16.11.08   
אל הפורום  
  11. מפתח הוא אף פעם לא מיותר לדעתי, גם אם לא משתמשים בו  
בתגובה להודעה מספר 6
 
יותר מדי. אתה חייב דרך לזהות את הרשומות שלך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   14:31   15.11.08   
אל הפורום  
  7. תודה אחי.. לא מכיר את הON DUPLICATE..  
בתגובה להודעה מספר 4
 
   ערכתי לאחרונה בתאריך 15.11.08 בשעה 14:33 בברכה, ronen333
 
ולא כל כך הבנתי למה אתה מתכוון.. תוכל להדגים?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   16:27   15.11.08   
אל הפורום  
  8. בטח  
בתגובה להודעה מספר 7
 
  
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   14:30   16.11.08   
אל הפורום  
  9. תודה אחי =]  
בתגובה להודעה מספר 8
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   19:34   16.11.08   
אל הפורום  
  10. אח שלי אני לא יכול שלא להשים לב...  
בתגובה להודעה מספר 0
 
   אבל שמתי לב לזה שאתה לא עבוד הכי נכון..

יש לך פה כל מיני דברים שאתה יכול לתקן ולעבוד הרבה יותר חכם.
( סתם שאלה כמה זמן אתה מתכנת ב .NET ? )

לדוגמא:
1. למה אתה לא עובד עם פרמטרים במסד נתונים שלך זה הכי מסוכן במיוחד שאתה משתמש עם סרויסים.
2.שמתי לב שאתה עושה הצהרה כל פעם למסד נתונים שלך דרך קוד, למה אתה לא מתשמש ב WEB.CONFIG? ככה אתה יכול גם לשנות דינאמית את החיבור שלך מתי שתרצה.
3.שמתי לב שבישביל לקבל את המשתמש האחרון שנכנס אתה מושך את כל הטבלה? למה אתה יכול לבנות פונקציה ב SQL שתביא לך ישירות את התוצאה של ה ID בלי צורך להכניס אפילו ל DATASET אני לא יודע למה להשים בכלל ב DATASET את התוצאות אם אתה לא הולך לעשות משהו ממש מורכב עם הנתונים , אתה יכול לעבוד ישירות על החיבור זה כולה שורה אחת.
4.אתה מסתמך על הספירה של השורות של המסד נתונים שלך כ ID , ברגע שאם תרצה לעשות אופטימיזצייה למסד נתונים זה לא יעבוד לך , לא לדבר שאם תמחוק משתמש ה ID שתקבל לא יהיה נכון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:18   17.11.08   
אל הפורום  
  12. כנס אחי =]  
בתגובה להודעה מספר 10
 
   זה לא שלי הדבר הזה.. זה הפרוייקט בחאפרי של חבר שלי ואני עכשיו עוזר לו בדקה ה90.
אבל ציינת כמה נקודות שלא כל כך מוכרות לי ואשמח עם תפרט עליהן.
עכשיו לגבי:
1.אממ על מה אתה מדבר?.. אני עד עכשיו עבדתי עם COMMAND BUILDER ולא עם משפטי SQL.. וWEB SERVCIES די חדש לי אז אני לא אתפלא ביכלל אם אני עושה דברים לא בצורה הכי טובה. אני עושה כמו שהמורה הגרוע שלי לימד אותי XD.
2.וואלה אחי אין לי מושג אשמח אם תסביר לי על זה.
3.אממ תוכל להראות דוגמה? אמרתי לעצמי שלא יהיה בעיות אם אני אקח את הID האחרון מאשר אני אספור כמו שורות יש במשפט SQL.
4.למה שיהיה לא נכון? מקבל את הID האחרון והוא בסדר עולה.. אתה מוחק מישהו הוא לוקח את האחרון ומוסיף לו אחד. נגיד יש לך 12345 אתה מוחק את 3, ונרשם עם עוד משתמש אז זה יהיה 12456.. מה לא בסדר בזה? XD

אני די חדש וחלש בתחום הזה אשמח אם תעזור לי =]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   13:28   17.11.08   
אל הפורום  
  13. בקשר לID האחרון :S  
בתגובה להודעה מספר 12
 
   מה רע בשאילתא כזאת


SELECT MAX(`deal_id`) AS last_id FROM `request_deals`

אממ בPHP יש פונקציה mysql_insert_id() שמחזירה לך את הid שבפעולת הinsert האחרונה.

ASP.NET מסבכת הכול :|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:47   17.11.08   
אל הפורום  
  14. אין בעיה בצורה עצמה אלה בי XD  
בתגובה להודעה מספר 13
 
   אני לא תותח SQL כמוך.. לא נגעתי בSQL שנה ומשהו..
אממ תוכל להסביר את הצורת כתיבה הזאת?
מה שבתוך הMAX זה העמודה, מה זה LAST_ID? משתנה?
וכמובן שהבנתי שאחרי הFROM זה הטבלה XD.

תודה =]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   14:14   17.11.08   
אל הפורום  
  16. אתה לא יודע מה זה AS בSQL?  
בתגובה להודעה מספר 14
 
   איך אתה עובד עם שאילתות שדורשות איחוד טבלאות ,וקצת יותר מורכבות מ...

select * from `tablename`

עם AS אתה יכול לתת שם לשדה בטבלה ,למשל אם שלפת 2 נתונים עם שם דומה מ2 טבלאות אז אתה יכול לעשות דבר כזה


SELECT `articles`.`title` AS article_title,`responds`.`title` AS responds_title FROM `articles`,`responds` WHERE.....

בקיצור AS זה סוג של כינוי לשדה ,שיש לך תת שאילתות שבהן אתה שולף נתון מסויים ואתה רוצה לייצג אותו ,אז רק עם AS אתה יכול לעשות את זה

עוד דוגמא


SELECT *,(SELECT id FROM tablename WHERE name='a') AS s_id From.....

משתנים בSQL זה משו אחר לגמרי.

מקווה שהבנת.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   15:43   17.11.08   
אל הפורום  
  18. אמממ  
בתגובה להודעה מספר 16
 
   ערכתי לאחרונה בתאריך 17.11.08 בשעה 16:19 בברכה, ronen333
 
לא לא מכיר את האופרטור הזה בSQL.. בזמנו שלמדתי למדתי מהאתר http://www.w3schools.com/sql/default.asp ... ולמדתי את הBASIC וקצת JOIN בשביל הקשרי גומלין.

בכל מקרה.. הצורת כתיבת שלך נראת לי יחסית כמו סינית.. בחיים שלי לא כתבתי ככה |= .
SELECT `articles`.`title` AS article_title
זו שיטה שביכלל לא מוכרת לי בSQL.. מידע בתיכנות בכללי אני יכול להבין שאתה ניגש פה לשדה כותרת בתוך טבלת המאמרים.

אז בעצם האופרטור AS נותן שם לשדה שנבחר דרך SQL מקונן שכזה(?) ואז אני יכול להמשיך את המשפט SQL החיצוני? X=

אז מה שעשית כאן-
SELECT MAX(`deal_id`) AS last_id FROM `request_deals`
זה למצוא את הID המקסימלי לקבוע שהוא LAST_ID (לא יודע אם שרירותית.. אתה משתמש בLAST_ID אחר כך?) מהטבלה request_deals.
ואיפה אני מכניס את זה בתוך DATASET? אשמח אם תראה לי איזה זה הולך לאחר השימוש גם באותו SQL.

מצטער אם אני משגע אותך, ותודה רבה על העזרה והסבלנות

עריכה:אני מבטיח לעשות רענון על זה במקום לשגע אותכם אבל באמת יהיה נחמד אם תענה לי על זה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   19:26   17.11.08   
אל הפורום  
  23. אל תתפוס אותי בזה אחי לא השתמשי בזה בחיים  
בתגובה להודעה מספר 13
 
   אבל ב SQL עצמו גם יש משפט שמביא לך את הINSERT האחרון שהכנסת,


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות, דרג אמינות חבר זה
   14:09   17.11.08   
אל הפורום  
  15. אביעד...  
בתגובה להודעה מספר 12
 
   על כל אחת מהשאלות פה תוכל למצוא תשובה בגוגל...
תתחיל ללמוד לבד... התשובות שתקבל פה(ולא משנה ממי וכמה הוא ישקיע)
בחיים לא יהוו תחליף לכמות המידע והאופן שזה מוסבר בגוגל בכלל וב MSDN
ו CODEPROJECT וכאלו בפרט...
בהצלחה.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   14:15   17.11.08   
אל הפורום  
  17. לירן  
בתגובה להודעה מספר 15
 
   אני אחפש בוגל, הבעיה היא למצוא את מה שאני מחפש XD.
בMSDN מסבירים על אובייקטים, לא על הCONEPT שאני צריך לקבל.. ובASP.NET יש מדריכי ווידאו חאפרים שמשתמשים בקיוצרים טיפשיים של הVS.

אם יש לך איזה מקום נורמלי שאני יכול ללמוד מימנו אני אשמח =].


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות, דרג אמינות חבר זה
   17:02   17.11.08   
אל הפורום  
  19. אממ  
בתגובה להודעה מספר 12
 
   1. תחפש OleDbCommand Parameters בגוגל ותמצא דוגמה לשימוש. הרעיון הוא פשוט

objCmd = new OleDbCommand("insert into (, ) values (@firstParam, @secondParam)", objConn);
objCmd.Parameters.Add("@firstParam", OleDbType.VarChar).Value = "Hello";
objCmd.Parameters.Add("@secondParam", OleDbType.Numeric).Value = 123;

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

2. http://www.odetocode.com/Articles/345.aspx - יש שם מידע. ב ConnectionString בקובץ Web.Config תשים איזה Connection String שבא לך.

3+4. זה ממש לא הדרך הנכונה.. תאר מצב כזה, יש לך 3 רשומות: 1, 2, 3. אתה מוחק את רשומה 2 והמצב עכשיו הוא 1,3... אתה לוקח את ה ID האחרון וזה אומר שיש לך 3 רשומות... זה נכון? הדרך הנכונה היא משפט count:


select count(id) from

בהצלחה...

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   17:15   17.11.08   
אל הפורום  
  20. כמו תמיד לירן , יצאת תותח =]  
בתגובה להודעה מספר 19
 
   ערכתי לאחרונה בתאריך 17.11.08 בשעה 17:16 בברכה, ronen333
 
הבנתי לגבי ה1-תודה =] אפשר רק לדעת מה הסיבה בדיוק לעבוד ככה? בטיחות? , 2 אני אקרא ממש עוד מעט אני צריך להתכונן למבחן באזרחות XD.

ולגבי 3 ו4 אתה כנראה לא הבנת את המטרה של הID שלי.. המטרה היא לא להציג כמה שורות יש אלא לתת ID יחודי לכל אחד. אם מחקתי 1,2,3 ומחקתי את 2 אז סבבה, אין יותר 2. אני נרשם יוצא משתמש מס' 4 ובטבלה יש 1,3,4 בדיוק כמו שרציתי.

אם אני אעשה את זה עם COUNT אז נניח ויש לי את זה 1,2,3 אני מוחק את 1 אז יווצר לי מצב כזה 2,3,3 וזה שגוי... אני טועה? X=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות, דרג אמינות חבר זה
   18:29   17.11.08   
אל הפורום  
  21. Count לא מחזיר לך בכלל אינדקסים  
בתגובה להודעה מספר 20
 
   Count יחזיר לך כמה רשומות יש לך בטבלה. זהו. קפוט. לא אכפת לך איך זה עובד ואיך זה מתנהג, הוא פשוט יחזיר תכלס כמה שורות יש לך בטבלה.
לגבי ID שהוא 'מבולגן', 1, 2, 4, 6... אין בעיה, אבל במצב כזה אין לך (על פי הדוגמה שלי) 6 אנשים, יש לך רק 4...

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   19:01   17.11.08   
אל הפורום  
  22. הדרך שהצגתי לו עם הMAX(id) יותר נוחה:}  
בתגובה להודעה מספר 21
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   20:27   17.11.08   
אל הפורום  
  25. נוו נכון.. מה זה שונה ממה שאמרתי?  
בתגובה להודעה מספר 21
 
   ערכתי לאחרונה בתאריך 17.11.08 בשעה 20:27 בברכה, ronen333
 
אמרתי שלא עשיתי את זה עם COUNT בכוונה ביגלל המקרה שזה סופר שורות.
מזה שזה סופר שורות יכול להיווצר שכפול מידע..
סתכל מצב קיים-
1,2,3,4
אתה בא למחוק את 1.
מצב לאחר מכן
2,3,4
כמה שורות? 3.
עכשיו אתה מוסיף יוזר-
2,3,4,4
ERROR

לפי הרעיון שלי זה ככה
2,3,4,5
וזהו |=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   19:33   17.11.08   
אל הפורום  
  24. פרמטרים זה דרך בטוחה להכניס למסד נתונים..  
בתגובה להודעה מספר 12
 
   1. אתה מגדיר לך משפט SQL שבו במקום לשרשר לך כל מיני שדות בחאפריות אתה מגדיר לך פשוט מילות מפתח כמו ?id ואז הפרמטר מעביר את הנתונים כמו שצריך וגם מטפל בחריגים של כל מיני תווים לא רצויים ומונע גם SQLINJECTIONS ( שזה הזרקת שאילתות וזה כבר קשור לאבטחה למידע נוסף תחקור קצת...)

2.יש לך בוואב קונפיג מפתח שנקרא CONNECTION STRING תעשה חיפוש בגוגל WEB.CONFIG CONNECTION STRING והוא כבר יראה לך דוגמאות , כך שאם בעתיד תרצה בעצם להעביר את ה DATABASE למקום אחר כמו נגיד שרת כללי או מחשב אחר ברשת אתה תוכל לעשות את זה בלי לעבור על הקוד שלך דף אחרי דף ולשנות את זה פיזי אלא רק פעם אחת וזה ישנה גלובלי.

3. זה קושר כבר ל SQL אני רואה שאתה שולף את כל הטבלה , ואז אחרי זה אתה מריץ עליה חיפוש , אין לך צורך בזה אחי , אתה יכול לעשות את זה עם שאילתה שהיא הרבה יותר פשוטה וככה אתה לא מכביד על השרת גם מבחינת ה ASP.NET וגם מבחינת SQL שימשוך רק רשומה אחת במקום טבלה שלמה שיכולה להכיל לך אם לא אלפי רשומות שלמות.
בקשר לדוגמא כרגע אני לא בבית אני יגיע הבייתה אני יראה לך דוגמא שלי של משיכה מהמסד עתמו ויש לי גם WRAPPER ל DATABASE איפשהו אז אני יביא לך אותו יהיה לך יותר נוח לעבוד עם המסדי נתונים.

4.זה לא נכון וזה טעות חמורה!
אתה סופר את השורות שיש לך במסד נתונים יש לך עכשיו נגיד 500 משתמשים , ביקשת עכשיו למחוק מתשמש יש לך 499 שורות , אבל ה ID החדש יהיה 501 אז.. זה לא יהיה נכון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   20:38   17.11.08   
אל הפורום  
  26. מכתב  
בתגובה להודעה מספר 24
 
   ערכתי לאחרונה בתאריך 17.11.08 בשעה 20:52 בברכה, ronen333
 
קודם כל תודה רבה =].
עכשיו לגבי כל אחד מהם-
1.סבבה תודה, ואני יודע מה זה SQL INJECTIONS האובייקט COMMAND BUILDER טיפל לי בדברים האלה.. עכשיו חזרתי לSQL ואני קצת אבוד, אז סליחה P=.
2.תודה, לירן הביא לי לינק אני אקרא אותו בעיון מאוחר יותר =].
3.תודה, מחכה =].
4.נוו בסדר.. זה מה שאני רוצה. לא הבנתי מה לא בסדר בזה XD
 
return int.Parse(ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1]["friend_id"].ToString())+1;

מה אני עושה כאן?
אני הולך לשורה האחרונה, לוקח את הID ומוסיף לה אחד. מה לא בסדר בזה? |=
נגיד יש לי כמו שאתה אומר 500 שורות..
בוא לא נשכח שDATASET זה מעין מערך.. אז אני הולך לתא ה499. לוקח את הID שבו ומוסיף לו אחד.

אז נגיד שיש מצב כזה:


1...499,500

סבבה?
סתם מתחשק לי למחוק את 500

1...499

עכשיו אני מוסיף שורה חדשה אז אני מוסיף
499+1=500
הכל תקין.
המצב הוא שוב


1...499,500

עכשיו סתם בדיקה בא לי למחוק את 499

1...498,500

מוסיף שורה

1...498,500,501

גם פה זה יוצא לפי הרצון שלי.. (אני לא טוען שיש 501 שורות, אני טוען שהוא המשתמש ה501)
אז אני לא מבין מה אתה מנסה להעביר לי פה. אני לא מנסה שיהיה רשום ששוב יש 500.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   23:29   17.11.08   
אל הפורום  
  27. ברגע שמחקת את סמפר 500  
בתגובה להודעה מספר 26
 
   לא יהיה לך יותר ID עם המספר 500 , הוא ידלג על המספר הזה זה הבעיה...

הנה קוד לדוגמא לשימוש עם פרמטרים:


Dim conn As New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("CoreDB").ConnectionString)
Dim cmd As New MySqlCommand()
Dim query As String = "Delete From FAQ_cats Where ID=?ID;"

cmd.CommandText = query
cmd.CommandType = CommandType.Text

cmd.Parameters.AddWithValue("?id", ID)

cmd.Connection = conn
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()


זה הפרמטר אם לא שמת לב:
אם תשים לב במשפט SQL יש לך ?id אז הוא מחליף אותו במשתנה שאני צריך הוא יודע גם לזהות לבד איזה סוג של טיפוס נתתי לו ולעשות המרה לבד ככה שלא צריך להשים גרשיים וכל מיני בסטרינגים וכאלה וזה מונע לך מלא בדיקות באגים אחרי זה.

cmd.Parameters.AddWithValue("?id", ID)


ותשים לב טוב גם לשורה הזאת:


Dim conn As New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("CoreDB").ConnectionString)

תראה שאני משתמש בחיבור דינאמי , הוא לוקח את הקונקשיין סטרינג מה web.config

והנה דוגמא לשימוש ישיר מהמסד נתונים:


Dim database As New DataAccessLayer.OleDB()
Dim StrSql As String
'SQL Query Command Line
Dim rs As MySql.Data.MySqlClient.MySqlDataReader
StrSql = String.Format("SELECT * from FAQ_cats where id={0};", rowID)
If database.Execute(StrSql) Then
rs = database.CommandObject.ExecuteReader()
If rs.HasRows Then
rs.Read()
ID = rowID
If Not IsDBNull(rs("CatName")) Then
CatName = CStr(rs("CatName"))
End If

If Not IsDBNull(rs("Location")) Then
Location = CInt(rs("Location"))
End If

End If 'End of Read , Closing Database and Reader Connection .
rs.Close()
database.close()
End If

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:58   18.11.08   
אל הפורום  
  28. תודה אחי כנס שניה  
בתגובה להודעה מספר 27
 
   ערכתי לאחרונה בתאריך 18.11.08 בשעה 13:58 בברכה, ronen333
 
לדעתי אין שום בעיה בזה שהוא מדלג על משתמש נמחק. להפך ככה אני יכול לדאוג לרשום למשתמש שמחפש משתמש שנמחק שהוא אינו קיים במערכת.
עכשיו היה לי קצת קשה להבין אותך בחלק האחרון כי זה סינטקס של VB ואני לא רגיל..

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

דרג אמינות חבר זה
   20:58   18.11.08   
אל הפורום  
  30. יש לך אותו בחתימה שלי :)  
בתגובה להודעה מספר 28
 
   בכל אופן
[email protected]

אם אני לא טועה רשום לי שם סמארטק , של פעם, אם לא אז זה יהיה ליאור כהן.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   22:45   18.11.08   
אל הפורום  
  31. כן אני יודע אבל לא ידעתי מה הניק אז זה בעיה  
בתגובה להודעה מספר 30
 
   כי יש לי הרבה אנשים ולא ידעתי את מי לחפש XD.
בכל מקרה זה ליאור כהן XD.

יש מצב אתה מתחבר? XD


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   20:37   18.11.08   
אל הפורום  
  29. ניסתי להשים את הPARAMTERS ולא עובד X=  
בתגובה להודעה מספר 0
 
   אני אצל חבר שלי עכשיו ועשיתי את מה שלירן הביא פה עם הפרמטרים.

רושם שיש בעיה בINSERT....


using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

[WebMethod]
public DataSet Insertm(Users user)
{
string st, my_query;
DataSet ds = new DataSet();
int x;
st = @"provider=Microsoft.jet.oledb.4.0;Data Source = " +
Server.MapPath("~/Data/db6.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = st;
//my_query = "INSERT INTO friendsclients VALUES(" + user.ID + ",'" + user.Name + "','" + user.Last_Name + "','" + user.Phone + "','" + user.Address + "','" + user.Password + "'," + user.Group + ",'" + user.City + "','USERPIC'";
OleDbCommand cmmd = new OleDbCommand("INSERT INTO friendsclients VALUES(@idparam,@nameparam,@lastnameparam,@phoneparam,@addressparam,@passwordparam,@groupparam,@cityparam,@picparam" , conn);
cmmd.Parameters.Add("@idparam", OleDbType.Numeric).Value = user.ID;
cmmd.Parameters.Add("@nameparam", OleDbType.VarChar).Value = user.Name;
cmmd.Parameters.Add("@lastnameparam", OleDbType.VarChar).Value = user.Last_Name;
cmmd.Parameters.Add("@phoneparam", OleDbType.VarChar).Value = user.Phone;
cmmd.Parameters.Add("@addressparam", OleDbType.VarChar).Value = user.Address;
cmmd.Parameters.Add("@passwordparam", OleDbType.VarChar).Value = user.Password;
cmmd.Parameters.Add("@groupparam", OleDbType.Numeric).Value = user.Group;
cmmd.Parameters.Add("@cityparam", OleDbType.VarChar).Value = user.City;
cmmd.Parameters.Add("@picparam", OleDbType.VarChar).Value = "newpic";

conn.Open();
x = cmmd.ExecuteNonQuery();
if (x != 0)
{
string my_quary2 = "Select * From friendsclients";
OleDbCommand cmmd2 = new OleDbCommand(my_quary2, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmmd2);
da.Fill(ds);
}
conn.Close();
return (ds);
}
[WebMethod]
public int GetLastUserID()
{
DataSet ds = new DataSet();
string st = @"provider=Microsoft.jet.oledb.4.0;Data Source = " +
Server.MapPath("~/Data/db6.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = st;
conn.Open();
string my_quary2 = "Select * From friendsclients";
OleDbCommand cmmd2 = new OleDbCommand(my_quary2, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmmd2);
da.Fill(ds);
conn.Close();
if (ds.Tables[0].Rows.Count != 0)
{
return int.Parse(ds.Tables[0].Rows[ds.Tables[0].Rows.Count-1]["friend_id"].ToString())+1;
}
else
{
return 0;
}

}
}


תודה רבה =]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net