none
בעיה בביצוע שאילתא. RRS feed

  • שאלה

  • היי,

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

      public void ReaderPassword(string UserNickName, int UserPassword)
        {
          DataSet ds = Sqlhelper.fill(string.Format("select * from Korym where UserPassword={0} and UserNickName=\"{1}\"", UserPassword, UserNickName),"Korym"); 
          if (ds.Tables["Korym"].Rows.Count > 0)
          {
            DataRow dr = ds.Tables["Korym"].Rows[0];
            dr["UserPassword"] = UserPassword;
            Sqlhelper.update(ds, "select * from Korym", "Korym");
          }
        }
    

    יום חמישי 27 ינואר 2011 16:21

תשובות

  • נקודה למחשבה:

    מה המשמעות של השימוש ב  try?

    אתה אומר שיש לך בעיה בהרצת הקוד ומשקיע "הרבה" על כתיבה של קוד בדיקה אז היכן תוצאות הבדיקה שלך?

    הקוד נראה מוזר מאוד מהבחינה של כל השימוש במחלקה הזו בצורה מיותרת לחלוטין לטעמי (זה אבל רק עניין של טעם אישי אולי). אתה יותר מדי מסתמך על אובייקטים ובצורה זו שוב אין לך שום שאילתת עדכון בצורה ישירה. למעשה אתה מסמך על כך שהמחלקה תייצר לך את שאילתת העדכון הנכונה. לפחות תנצל את השימוש ב try   בצורה חכמה לאתר את הבעיה בצורה קלה :-)

    תתחיל לדבג את הקוד ולאתר את מקור הבעיה... האם בדקת שבכלל הנתונים נלקחו ממסד הנתונים?!? האם בדקת שבכלל ההתחברות למסד הצליחה...נראה שכל נקודה פשוט עטפת בהוראה של try כמו שהיו עושים הרבה ילדים בפורומים פעם שהיו מוסיפים בתחילת האפליקציה ב VBS את ההוראה on error resum next וככה הם תמיד חשבו שאין להם שום תקלות כי לא הופיעו הודעות שגיאה

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

    דוגמה בכל מקרה על שימוש נכון ב SqlCommandBuilder תוכל לראות כאן:
    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx

    וכמובן תבדוק מייד אחר כך את הקישור הבא:
    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.selectcommand.aspx

    אני מקווה שזה יעזור להתחיל למצוא את הבעיה הספציפית

     

    * הערה: אישית אני לא עובד עם האובייקט SqlCommandBuilder אף פעם ומעדיף לכתוב שאילתות לבד תמיד.

    • נערך על-ידי pituachMVP, Editor שבת 29 ינואר 2011 19:35 תיקון שגיאת הקלדה
    • הוצע כתשובה על-ידי EitanBlumin יום ראשון 30 ינואר 2011 08:54
    • סומן כתשובה על-ידי Meir Pinto יום רביעי 23 פברואר 2011 06:24
    שבת 29 ינואר 2011 19:19
    מנחה דיון

כל התגובות

  • ערב טוב

     

    לצערי אתה עושה שימוש במחלקה ואין לך בכלל שאילתות עדכון בקוד שצירפת

    המחלקה בשם SqlHelprer מכילה קוד שמייצר עבורך אולי את שאילתות העדכון כפי הנראה

    1. השאלה שלך לא קשורה בשום דרך שהיא לפורום זה :-) לא לשאילתות ו/או לא לשרת SQL (כאמור אתה לא כותב שום שאילתה בקוד). השאלה שלך קשורה לפיתוח בשפת c# :-)

    2. המחלקה שלך אינה נמצאת אצלנו ואנחנו לא יכולים לנחש מה הקוד שבונה אותה.
    חיפוש קצר באינטרנט הוביל אותי למספר מחלקות נפוצות בשם זה + יש לי מחלקה קבועה בדיוק בשם זה שאני פתחתי ואני עובד איתה כבר כמה שנים. בשום אחת מהמחלקות הנ"ל אין מאפיין fill כמו שיש בקוד שלך כך ששוב אני לא בטוח באיזה מחלקה אתה עושה שימוש ומהיכן העתקת את הקוד (מומלץ להביא את הקוד מקור של המחלקה ואז נוכל אולי לעזור יותר או לפנות למי שכתב אותה)

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

    http://www.sharpdeveloper.net/source/SqlHelper-Source-Code-cs.html

    והנה עוד קישור למחלקה בשם זה זהה כמעט לחלוטין?!?

    http://www.koders.com/csharp/fid5F6557C27DD01854BC85719A8B8A25A468393A08.aspx?s=sqlhelper#L5

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

    * צרף לנו את המחלקה בה אתה עושה שימוש אם אתה רוצה עזרה כתיבת קוד בשפת C# (ואין לזה קשר לפורום אבל אין בעיה לעזור) או
    עבור לעבוד עם שאילתות וכתיבת קוד לבד ותגלה שכל המחלקות המוכנות האלו לא תורמות לך יותר מדי אם אתה לא שולט בהן טוב מאוד או אתה גרוע מאוד (למי שבאמצע אני ממליץ לעבוד עם קוד שלו וזה כולל את כולם כמעט)

    יום שישי 28 ינואר 2011 15:58
    מנחה דיון
  • תודהרבה,

    הנה המחלקה המצורפת.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace DAL
    {
      public class Sqlhelper
      {
    
        ///פעולה שמחזירה את מחרוזת ההתקשרות לבסיס הנתונים
        public static string CONECTIONSTRING
        {
          get
          {
            //return @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\omer\שולחן העבודה\ws16910michleviz\db\LibraryDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            return @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\omer\שולחן העבודה\ws16910michleviz\db\LibraryDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
          }
        }
        //פעולה המחזירה טבלת רשומות מתוך הדטהבייס
        public static DataSet fill(string com, string name)
        {
          SqlConnection cn = new SqlConnection(CONECTIONSTRING);
          SqlCommand command = new SqlCommand();
          command.Connection = cn;
          command.CommandText = com;
          DataSet ds = new DataSet();
          SqlDataAdapter adapter = new SqlDataAdapter(command);
          try
          {
            adapter.Fill(ds,name);
          }
          catch
          {
    
          }
          finally
          {
          }
          return ds;
        }
        //פעולה המעדכנת את הדטהבייס בהתאם לדטהסט
        public static void update(DataSet ds, string com, string name)
        {
          SqlConnection cn = new SqlConnection(CONECTIONSTRING);
          SqlCommand command = new SqlCommand();
          command.Connection = cn;
          command.CommandText = com;
    
          SqlDataAdapter adapter = new SqlDataAdapter(command);
    
          SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
          adapter.InsertCommand = builder.GetInsertCommand();
          adapter.DeleteCommand = builder.GetDeleteCommand();
          adapter.UpdateCommand = builder.GetUpdateCommand();
          try
          {
            cn.Open();
            adapter.Update(ds, name);
          }
          catch
          {
          }
          finally
          {
            cn.Close();
          }
    
    
        }
      }
    }
    
    

    שבת 29 ינואר 2011 08:50
  • נקודה למחשבה:

    מה המשמעות של השימוש ב  try?

    אתה אומר שיש לך בעיה בהרצת הקוד ומשקיע "הרבה" על כתיבה של קוד בדיקה אז היכן תוצאות הבדיקה שלך?

    הקוד נראה מוזר מאוד מהבחינה של כל השימוש במחלקה הזו בצורה מיותרת לחלוטין לטעמי (זה אבל רק עניין של טעם אישי אולי). אתה יותר מדי מסתמך על אובייקטים ובצורה זו שוב אין לך שום שאילתת עדכון בצורה ישירה. למעשה אתה מסמך על כך שהמחלקה תייצר לך את שאילתת העדכון הנכונה. לפחות תנצל את השימוש ב try   בצורה חכמה לאתר את הבעיה בצורה קלה :-)

    תתחיל לדבג את הקוד ולאתר את מקור הבעיה... האם בדקת שבכלל הנתונים נלקחו ממסד הנתונים?!? האם בדקת שבכלל ההתחברות למסד הצליחה...נראה שכל נקודה פשוט עטפת בהוראה של try כמו שהיו עושים הרבה ילדים בפורומים פעם שהיו מוסיפים בתחילת האפליקציה ב VBS את ההוראה on error resum next וככה הם תמיד חשבו שאין להם שום תקלות כי לא הופיעו הודעות שגיאה

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

    דוגמה בכל מקרה על שימוש נכון ב SqlCommandBuilder תוכל לראות כאן:
    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx

    וכמובן תבדוק מייד אחר כך את הקישור הבא:
    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.selectcommand.aspx

    אני מקווה שזה יעזור להתחיל למצוא את הבעיה הספציפית

     

    * הערה: אישית אני לא עובד עם האובייקט SqlCommandBuilder אף פעם ומעדיף לכתוב שאילתות לבד תמיד.

    • נערך על-ידי pituachMVP, Editor שבת 29 ינואר 2011 19:35 תיקון שגיאת הקלדה
    • הוצע כתשובה על-ידי EitanBlumin יום ראשון 30 ינואר 2011 08:54
    • סומן כתשובה על-ידי Meir Pinto יום רביעי 23 פברואר 2011 06:24
    שבת 29 ינואר 2011 19:19
    מנחה דיון
  •  

    היי,

    אשמח אם תוכל/י לעדכן אותנו בסטטוס השאלה שלך.

    במידה וקיבלת תשובה מתאימה לשאלתך, יש לסמן את התשובה המתאימה ע"י לחיצה על "סמן כתשובה" ליד סימון ה V הירוק

    אם לא קיבלת תשובה, מומלץ לספק פרטים נוספים אודות הבעיה, פרטי לוג, צילומי מסך וכו'

    על מנת להעלות תמונה לפורום ניתן להעזר במדריך להעלאת תמונה


    אם תגובתי פתרה את בעייתך - לחץ/י, על "סמן כתשובה" ליד סימן ה V הירוק.


    מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של Microsoft. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
    יום שלישי 22 פברואר 2011 08:43