תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

    sql server

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

      אני מנסה לכתוב פרוצדורה שמכניסה נתונים ל2 טבלאות
      כאשר בכל טבלה יש ID .
      הטבלה השניה מקבלת מהראשונה את הID- מפתח של הראשון ומכניסה אותו כאחד מהנתונים
      ואת הID -מפתח של הטבלה השניה אני רוצה להחזיר בכל קריאה לפרוצדורה
      זה מה שכתבתי וזה מחזיר לי -1
      מה הבעיה .?

      ALTER PROCEDURE [dbo].[INSERT_DOC]
      	-- Add the parameters for the stored procedure here
      	@docName nvarchar(50) = 0, 
      	@autherName nvarchar(50) = 0, 
      	@docPath nvarchar(50) = 0,
      	@docDate date
      	
      AS
      BEGIN
      	-- SET NOCOUNT ON added to prevent extra result sets from
      	-- interfering with SELECT statements.
      	SET NOCOUNT ON;
      
          -- Insert statements for procedure here
      	INSERT INTO AUTHER (AUTHER_NAME)
      	VALUES (@autherName)
      	
      
      	INSERT INTO DOC (DOC_NAME,AUTHER_ID, DOC_PATH,DOC_DATE)
      	VALUES (@docName,@@IDENTITY, @docPath, @docDate)
      
      	SELECT SCOPE_IDENTITY() as D_ID
      
      	 
      
      END
      
      OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • OdedDvir
        OdedDvir @שרה רחל נערך לאחרונה על ידי

        @שרה-רחל אמר בsql server:

        SELECT SCOPE_IDENTITY() as D_ID

        האם כבר קיים שדה D_ID בטבלה DOC?

        תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • ש
          שרה רחל נערך לאחרונה על ידי

          האם כשאני קוראת
          AS D_ID
          זה לא נקרא שאני מכנה את כל השורה SELECT SCOPE_IDENTITY()
          בשם
          D_ID
          הטבלה עצמה מכילה את העמודה
          DOC_ID

          OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • OdedDvir
            OdedDvir @שרה רחל נערך לאחרונה על ידי OdedDvir

            @שרה-רחל אמר בsql server:

            האם כשאני קוראת
            AS D_ID
            זה לא נקרא שאני מכנה את כל השורה SELECT SCOPE_IDENTITY()
            בשם
            D_ID
            הטבלה עצמה מכילה את העמודה
            DOC_ID

            זה כן, רק חשבתי שאולי זו בעיה של שמות.

            1. האם ההכנסה הראשונה מתבצעת כראוי?
            2. האם בהכנסה השנייה הערך AUTHER_ID שמוכנס ל-DOC הוא כן תקין?
            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ש
              שרה רחל נערך לאחרונה על ידי

              זה השדות של DOC:

              -[DOC_NAME]INT
                         ,[AUTHER_ID]-nvarchar(50)
                    -     ,[DOC_PATH]-INT
                         ,[DOC_DATE]-DATE
              וזה השדות של AUTHER
              AUTHER_ID-INT
              AUTHER_NAME-nvarchar(50)
              
              תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • ש
                שרה רחל נערך לאחרונה על ידי

                אולי ההמרה של הDATE משפת C# בויזואל סטודיו שהוא מסוג DateTime
                לSQL SERVER מסוג DATE
                שגויה ?

                OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • OdedDvir
                  OdedDvir @שרה רחל נערך לאחרונה על ידי

                  @שרה-רחל

                  1. האם ההכנסה הראשונה מתבצעת כראוי?
                  2. האם בהכנסה השנייה הערך AUTHER_ID שמוכנס ל-DOC הוא כן תקין?

                  לא עניתם על השאלות...

                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • ש
                    שרה רחל נערך לאחרונה על ידי

                    כן
                    ההכנסות מתבצעות כראוי

                    OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • OdedDvir
                      OdedDvir @שרה רחל נערך לאחרונה על ידי OdedDvir

                      @שרה-רחל אמר בsql server:

                      ההכנסות מתבצעות כראוי

                      אם ההכנסות מתבצעות כראוי, אז כנראה אין בעיה בקריאה מ-C#.
                      מדוע השדה DOC_PATH מוגדר כ INT אבל הפרמטר @docPath כ NVARCHAR?

                      תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • ש
                        שרה רחל נערך לאחרונה על ידי

                        טעות

                        [DOC_NAME]nvarchar(50
                                   ,[AUTHER_ID]-)int
                              -     ,[DOC_PATH]-nvarchar(50
                                   ,[DOC_DATE]-DATE
                        
                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • ש
                          שרה רחל נערך לאחרונה על ידי

                          איך אני גורמת לפרוצדורה להחזיר את הערך של הID האחרון שהוכנס לDOC

                          OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • OdedDvir
                            OdedDvir @שרה רחל נערך לאחרונה על ידי

                            @שרה-רחל בעיקרון SCOPE_IDENTITY() אמור לעבוד.
                            תנסו אולי כך:

                            SELECT IDENT_CURRENT('DOC') AS D_ID
                            
                            תגובה 1 תגובה אחרונה תגובה ציטוט 1
                            • ש
                              שרה רחל נערך לאחרונה על ידי

                              @OdedDvir אמר בsql server:

                              SELECT IDENT_CURRENT('DOC') AS D_ID

                              מה הכוונה של DOC
                              למה לא DOC_ID

                              OdedDvir 2 תגובות תגובה אחרונה תגובה ציטוט 0
                              • OdedDvir
                                OdedDvir @שרה רחל נערך לאחרונה על ידי OdedDvir

                                @שרה-רחל אמר בsql server:

                                מה הכוונה של DOC

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

                                תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                • OdedDvir
                                  OdedDvir @שרה רחל נערך לאחרונה על ידי

                                  @שרה-רחל נשמח להתעדכן אם הבעיה נפתרה וכיצד.

                                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • ש
                                    שרה רחל נערך לאחרונה על ידי

                                    @שרה-רחל אמר בsql server:

                                    SELECT IDENT_CURRENT('DOC') AS D_ID

                                    עדיין מחזיר -1

                                    OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                    • OdedDvir
                                      OdedDvir @שרה רחל נערך לאחרונה על ידי

                                      @שרה-רחל מעניין...
                                      האם תוכלו לפרט את הגדרות הטבלאות ב-SQL?

                                      תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • ש
                                        שרה רחל נערך לאחרונה על ידי

                                        יש פקודה שמיצאת את כל הבסיסי נתונים ?

                                        OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                        • ש
                                          שרה רחל נערך לאחרונה על ידי

                                          Annotation 2020-07-17 011406.png

                                          תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • OdedDvir
                                            OdedDvir @שרה רחל נערך לאחרונה על ידי OdedDvir

                                            @שרה-רחל אמר בsql server:

                                            יש פקודה שמיצאת את כל הבסיסי נתונים ?

                                            לא צריך את הכל. רק את שתי הטבלאות הנ"ל.
                                            בSSMS קליק ימני על הטבלה >
                                            Script Table as > CREATE to > New Query Editor window

                                            30f70b99-8f00-433b-8399-d81e56da3ba1-תמונה.png

                                            ולהעתיק את תוכן החלון שנפתח

                                            תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                            • ש
                                              שרה רחל נערך לאחרונה על ידי

                                              USE [lib]
                                              GO
                                              
                                              /****** Object:  Table [dbo].[AUTHER]    Script Date: 7/17/2020 7:55:40 AM ******/
                                              SET ANSI_NULLS ON
                                              GO
                                              
                                              SET QUOTED_IDENTIFIER ON
                                              GO
                                              
                                              CREATE TABLE [dbo].[AUTHER](
                                              	[AUTHER_ID] [int] IDENTITY(1,1) NOT NULL,
                                              	[AUTHER_NAME] [nvarchar](50) NULL,
                                               CONSTRAINT [PK_AUTHER] PRIMARY KEY CLUSTERED 
                                              (
                                              	[AUTHER_ID] ASC
                                              )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
                                              ) ON [PRIMARY]
                                              GO
                                              
                                              
                                              USE [lib]
                                              GO
                                              
                                              /****** Object:  Table [dbo].[DOC]    Script Date: 7/17/2020 7:56:12 AM ******/
                                              SET ANSI_NULLS ON
                                              GO
                                              
                                              SET QUOTED_IDENTIFIER ON
                                              GO
                                              
                                              CREATE TABLE [dbo].[DOC](
                                              	[DOC_ID] [int] IDENTITY(1,1) NOT NULL,
                                              	[DOC_NAME] [nvarchar](50) NULL,
                                              	[AUTHER_ID] [int] NULL,
                                              	[DOC_PATH] [nvarchar](50) NOT NULL,
                                              	[DOC_DATE] [date] NULL,
                                               CONSTRAINT [PK_DOC] PRIMARY KEY CLUSTERED 
                                              (
                                              	[DOC_ID] ASC
                                              )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
                                              ) ON [PRIMARY]
                                              GO
                                              
                                              ALTER TABLE [dbo].[DOC]  WITH CHECK ADD  CONSTRAINT [FK_DOC_AUTHER] FOREIGN KEY([AUTHER_ID])
                                              REFERENCES [dbo].[AUTHER] ([AUTHER_ID])
                                              GO
                                              
                                              ALTER TABLE [dbo].[DOC] CHECK CONSTRAINT [FK_DOC_AUTHER]
                                              GO
                                              
                                              

                                              אולי צריך להגדיר בפרוצדורה RETURN?

                                              OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                              • OdedDvir
                                                OdedDvir @שרה רחל נערך לאחרונה על ידי

                                                @שרה-רחל אוקי.
                                                אחרי קצת חיפושים, מצאתי את הפוסט הזה שדן בבעיה. על פי האמור שם, הבעייה נמצאת באמת בקריאה לפרוצדורה מתוך C#.
                                                בקריאה יש להשתמש ב ExecuteScalar במקום ב Execute.
                                                נשמח להתעדכן אם אכן הפעיה נפתרה

                                                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                • ש
                                                  שרה רחל נערך לאחרונה על ידי

                                                  @OdedDvir אמר בsql server:

                                                  ExecuteScalar

                                                  זה הקוד של השליחה לפונקציה ושיניתי כאמור כפי שכתבתם רק עכשיו זה מתריע לי שהפונקיה מחזירה OBJECTולא INT

                                                   public int InsertDoc( string docName, string autherName, string docPath, DateTime docDate)
                                                          {
                                                              using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("lib`")))
                                                              {
                                                                 
                                                                  List<Doc> doc = new List<Doc>();
                                                  
                                                                  doc.Add(new Doc { DocName = docName , autherName = autherName, DocPath = docPath , DocDate = docDate });
                                                  
                                                                  return connection.ExecuteScalar("dbo.INSERT_DOC @docName, @autherName, @docPath, @docDate", doc);
                                                  
                                                              }
                                                          }
                                                  
                                                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                  • ש
                                                    שרה רחל נערך לאחרונה על ידי

                                                    מנסה להמיר לINT

                                                                    return Convert.ToInt32(connection.ExecuteScalar("dbo.INSERT_DOC @docName, @autherName, @docPath, @docDate", doc));
                                                    

                                                    ומחזיר לי את השגיאה בהרצה An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context

                                                    OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                    • OdedDvir
                                                      OdedDvir @שרה רחל נערך לאחרונה על ידי

                                                      @שרה-רחל אני חושב שזה בגלל שהפרוצדורה מחזירה רשומה ולא ערך יחיד.
                                                      תנסו להחליף את הערך המוחזר בפרוצדורה.
                                                      במקום:

                                                      SELECT SCOPE_IDENTITY() as D_ID
                                                      

                                                      לרשום:

                                                      RETURN SCOPE_IDENTITY()
                                                      
                                                      תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                                      • ש
                                                        שרה רחל נערך לאחרונה על ידי

                                                        @OdedDvir אמר בsql server:

                                                        RETURN SCOPE_IDENTITY()

                                                        לא עזר
                                                        ניסיתי גם להריץ דרך הSQL SERVER ישירות
                                                        וכשאני מריצה את ה פרוצדורה עם השורה SELECT SCOPE_IDENTITY() as D_ID
                                                        הוא מחזיר לי את העמודה הרלוונטית
                                                        וכשאני מריצה עם השורה RETURN SCOPE_IDENTITY()
                                                        הוא כותב שזה עבר ולא מחזיר לי ערך
                                                        ב2 המקרים בקריאה דרך ויזואל סטודיו מחזיר את אותה השגיאה שצינתי לעיל
                                                        תודה

                                                        OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                        • ש
                                                          שרה רחל נערך לאחרונה על ידי

                                                          @שרה-רחל אמר בsql server:

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

                                                          סליחה
                                                          דרך הSQL SERVER
                                                          זה כן מחזיר לי ערכים
                                                          השגיאה היא רק דרך VISUAL STUDIO

                                                          OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                          • OdedDvir
                                                            OdedDvir @שרה רחל נערך לאחרונה על ידי OdedDvir

                                                            @שרה-רחל אמר בsql server:

                                                            השגיאה היא רק דרך VISUAL STUDIO

                                                            התחביר שאתם מריצים ב VS לא תקין.
                                                            תנסו את הקוד הבא:

                                                             public int InsertDoc( string docName, string autherName, string docPath, DateTime docDate)
                                                            {
                                                                using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("lib`")))
                                                                {
                                                                    SqlCommand command = new SqlCommand("dbo.INSERT_DOC", connection);
                                                                    command.Connection.Open();
                                                                    command.CommandType = CommandType.StoredProcedure;
                                                                    command.Parameters.AddWithValue("@docName", docName);
                                                                    command.Parameters.AddWithValue("@autherName", autherName);
                                                                    command.Parameters.AddWithValue("@docPath", docPath);
                                                                    command.Parameters.AddWithValue("@docDate", docDate);
                                                                    return Convert.ToInt32(command.ExecuteScalar());
                                                                 }
                                                            }
                                                            
                                                            תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                                            • OdedDvir
                                                              OdedDvir @שרה רחל נערך לאחרונה על ידי

                                                              @שרה-רחל אמר בsql server:

                                                              וכשאני מריצה את ה פרוצדורה עם השורה SELECT SCOPE_IDENTITY() as D_ID
                                                              הוא מחזיר לי את העמודה הרלוונטית

                                                              תשאירו את הפרוצדורה המקורית בשימוש עם ExecuteScalar כנ"ל

                                                              תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                                              • 1 / 1
                                                              • פוסט ראשון
                                                                פוסט אחרון
                                                              בא תתחבר לדף היומי!