דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. קבלת משוב מAJAX שנשלח לSQL

קבלת משוב מAJAX שנשלח לSQL

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 3 כותבים 445 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י מנותק
    י מנותק
    יאן גולד
    כתב ב נערך לאחרונה על ידי
    #1

    אני שולח פוסט בAJAX שיבצע משהו בSQL,

    רציתי לדעת האם אפשר לקבל משוב האם הפעולה בSQL בוצעה כראוי או שהשאילתא לא הצליחה.

    לדוגמא:

    USE [Hotel]
    GO
    /****** Object:  StoredProcedure [dbo].[DelClient]    Script Date: 14/01/2016 13:42:14 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    ALTER PROCEDURE [dbo].[DelClient]
    @number int
    	
    AS
    if  exists (select client_id from reservations where client_id = @number)
    BEGIN
         RAISERROR('אין אפשרות למחוק לקוח לפני מחיקת ההזמנות הרשומות על שמו',1,16)
        rollback transaction
        return
    END
    
    if not exists(select client_id from client where client_id = @number)
    BEGIN
         RAISERROR('לקוח לא קיים',1,17)
        rollback transaction
        return
    END
    
    
    BEGIN
    DELETE FROM [dbo].[client]
          WHERE client_id= @number
    END
    

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

    פורסם במקור בפורום CODE613 ב14/01/2016 13:44 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #2

      אתה צריך לנהל את זה דרך הדוט נט (או מה שזה לא יהיה) שמריץ את הפרוצדורה, אין מושג כזה "AJAX שנשלח לSQL", ה AJAX נשלח על גבי HTTP שמריץ קוד שנכתב בשפה כלשהי, ומחזיר לו תשובה.

      פורסם במקור בפורום CODE613 ב14/01/2016 13:54 (+02:00)

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

      תגובה 1 תגובה אחרונה
      0
      • י מנותק
        י מנותק
        יאן גולד
        כתב ב נערך לאחרונה על ידי
        #3

        נכון, הAJAX קורא לסי שארפ, והוא מתחבר לSQL.

        אז איך אני אומר לסי שארפ לקבל את השגיאה של SQL?

        פורסם במקור בפורום CODE613 ב14/01/2016 13:57 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • S מנותק
          S מנותק
          softs
          כתב ב נערך לאחרונה על ידי
          #4

          לתפוס את השגיאות בסי שארפ זה try catch רגיל
          איפה השוני בין זה לבין שגיאה בסתם שורת קוד?
          אני בעיקרון פחות אוהב לזרוק שגיאות ב sql עצמו אלא להחזיר הודעה מסודרת
          בכדי להחזיר ערכים מפרוצדורה אתה יכול לבצע משפט סלקט בסוף הפרוצדורה ולקרוא לה דרך sqladapter.fill ואז תקבל את התוצאות של הסלקט הזה לטבלה
          מקווה שהייתי ברור

          פורסם במקור בפורום CODE613 ב19/01/2016 03:05 (+02:00)

          תגובה 1 תגובה אחרונה
          2
          • א מנותק
            א מנותק
            ארכיטקט
            כתב ב נערך לאחרונה על ידי
            #5

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

            using System;
            using System.Collections.Generic;
            using System.Data;
            using System.Data.SqlClient;
            using System.Linq;
            using System.Text;
            using System.Threading.Tasks;
            
            namespace SQL.GeneralSQLHelper.Commanders
            {
                public  class SQLServerCommander
                {
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <typeparam name="T"></typeparam>
                    /// <param name="sqlstatement"></param>
                    /// <param name="ValueIfNull"></param>
                    /// <param name="connection"></param>
                    /// <returns></returns>
                    public static T ReadScalarValueFromSQl<T>(string sqlstatement, T ValueIfNull, SqlConnection connection)
                    {
                        bool ConnectionPassOpening = (connection.State == ConnectionState.Open);
                        SqlCommand sqlCommand = new SqlCommand(
                        sqlstatement, connection);
                        if (!ConnectionPassOpening) { connection.Open(); }
            
                        SqlDataReader reader = sqlCommand.ExecuteReader();
                        T result = ValueIfNull;
            
                        if (reader.Read() && !reader.IsDBNull(0))
                        {
                            result = (T)reader[0];
                        }
                        if (!ConnectionPassOpening) { connection.Close(); }
                        return result;
                    }
            
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <typeparam name="T"></typeparam>
                    /// <param name="sqlstatement"></param>
                    /// <param name="ValueIfNull"></param>
                    /// <param name="ConnectionString"></param>
                    /// <returns></returns>
                    public static T ReadScalarValueFromSQl<T>(string sqlstatement, T ValueIfNull, string ConnectionString)
                    {
                        return ReadScalarValueFromSQl<T>(sqlstatement, ValueIfNull, new SqlConnection(ConnectionString));
                    }
            
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <param name="sqlstatement"></param>
                    /// <param name="commandType"></param>
                    /// <param name="connection"></param>
                    /// <returns></returns>
                    public static DataTable GetDataTableFromSql(string sqlstatement, CommandType commandType, SqlConnection connection)
                    {
                        bool ConnectionPassOpening = (connection.State == ConnectionState.Open);
                        if (!ConnectionPassOpening) { connection.Open(); }
                        
                        SqlCommand sqlCommand = new SqlCommand(
                            sqlstatement, connection);
            
                        sqlCommand.CommandType = commandType;
            
                        SqlDataAdapter da = new SqlDataAdapter(sqlCommand);
            
                        DataTable finalytable = new DataTable();
                        da.Fill(finalytable);
            
                        if (!ConnectionPassOpening) { connection.Close(); }
            
                        return finalytable;
                    }
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <param name="sqlstatement"></param>
                    /// <param name="commandType"></param>
                    /// <param name="ConnectionString"></param>
                    /// <returns></returns>
                    public static DataTable GetDataTableFromSql(string sqlstatement, CommandType commandType, string ConnectionString)
                    {
                        return GetDataTableFromSql(sqlstatement, commandType, new SqlConnection(ConnectionString));
                    }
            
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <param name="sqlstatement"></param>
                    /// <param name="connection"></param>
                    /// <returns></returns>
                    public static int  ExecuteNonQuery(string sqlstatement, SqlConnection connection)
                    {
                        
                        SqlCommand sqlCommand = new SqlCommand(
                            sqlstatement, connection);
            
                        sqlCommand.CommandType = CommandType.Text;
            
                        bool ConnectionPassOpening = (connection.State == ConnectionState.Open);
                        if (!ConnectionPassOpening) { connection.Open(); }
            
                        var result = sqlCommand.ExecuteNonQuery();
                        if (!ConnectionPassOpening) { connection.Close(); }
                        return result;
            
                    }
            
                    /// <summary>
                    /// 
                    /// </summary>
                    /// <param name="sqlstatement"></param>
                    /// <param name="ConnectionString"></param>
                    /// <returns></returns>
                    public static int ExecuteNonQuery(string sqlstatement, string ConnectionString)
                    {
                        return ExecuteNonQuery(sqlstatement, new SqlConnection(ConnectionString));
                    }
                }
            }
            

            פורסם במקור בפורום CODE613 ב19/01/2016 09:17 (+02:00)

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

            תגובה 1 תגובה אחרונה
            1
            • S מנותק
              S מנותק
              softs
              כתב ב נערך לאחרונה על ידי
              #6

              @יאן גולד

              RAISERROR('אין אפשרות למחוק לקוח לפני מחיקת ההזמנות הרשומות על שמו',1,16)

              עכשיו אני שם לב שאתה שם ב severity level את הערך 1 שזה בעצם מביא הודעת INFO ולא EXCEPTION ולכן אתה לא תופס את זה בקוד
              תשתמש במשהו בין 11 ל 16
              בלי קשר הודעות INFO הם דרך מצוינת לסמן progress אצל המשתמש, צריך להירשם לאירוע InfoMessage של ה sqlconnection בכדי לקבל אותן
              https://msdn.microsoft.com/en-us/library/a0hee08w.aspx

              פורסם במקור בפורום CODE613 ב19/01/2016 13:37 (+02:00)

              תגובה 1 תגובה אחרונה
              0

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום