שלח תשובה

זירת השאלות

710
צפיות
7
תשובות

שלום רב העברת פרמטרים MSSQL ASP

,‏ 15 באפריל, 2007

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

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

אך בהרצה עם ASP אני מקבל שגיאה
זה הקוד שלי ב ASP


str_sm="1234567"
set conn=server.createobject("adodb.connection")
conn.open dsn
set rs=server.createobject("adodb.recordset")
rs.activeconnection=conn
sql = "Declare @SS varchar(100),@DD Varchar(50); execute KKK '"&str_sm&"',@DD output; select @DD "
set rs = conn.execute(sql)
Response.write rs(1)  
rs.close: set rs = nothing:conn.close: set conn = nothing



היכן טעיתי ?

זו השגיאה שאני מקבל

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/abc.asp, line 53

53 זו השורה:

Response.write rs(1

תגיות:

7 תשובות

  1. זהר פלד הגיב:

    אז ככה:
    א) אם זו מחרוזת בודדת, תנסה להשתמש ב (rs(0, כי זה האיבר הראשון, לא (rs(1.
    ב) אם גם זה לא מצליח, תקרא לפונקציה דרך stored procedure, ותחזיר את הערך כמשתנה output.

  2. ell הגיב:

    מצאתי שהבעיה יותר מוזרה

    כשהפרוצדורה מבצעת INSERT היא לא מחזירה לי פרמטר
    אבל אם היא מבצעת SELECT או דבר אחר אז כן

    מה זה יכול להיות
    תודה

  3. זהר פלד הגיב:

    איך נראית הפרוצדורה?
    INSERT ברמת העקרון לא אמור להחזיר ערכים…

  4. ell הגיב:

    העניין הוא שגם אם אחרי ה INSERT …
    ניסיתי להחזיר סתם את המילה  "BOY"
    זה לא הולך

    ניסיתי לתקוף את הנושא בכיוון אחר וגם לא הולך
    אותה בעיה

    כך:
    כשיש אחר  INSERT הוא לא מעביר כלום
    כשאין הוא מעביר והכל בסדר

    וניסיתי להחזיר סתם את המילה  "BOY" אחרי ה INSERT ולא הולך


    dsn="חיבור מחרוזת"
    set cmd=Server.CreateObject("ADODB.command")
    set conn=server.createobject("adodb.connection")
    Set rs= Server.CreateObject("ADODB.Recordset")

    conn.open dsn

    cmd.ActiveConnection = conn
    rs.activeconnection=conn

    cmd.CommandText = "שם פרוצדורה"
    cmd.CommandType = 4

    str_paramters="12345" ' נתון שאני מעביר לפרוצדורה
    cmd.Parameters.Append cmd.CreateParameter("@DD" , 200,1,1000,str_paramters)  ' מקבל גודל 1000
    cmd.Parameters.Append cmd.CreateParameter("@AA" , 200,2,50)                  ' מחזיר

    Set rs = cmd.Execute  

    DATA = cmd.Parameters("@AA").Value
    response.write DATA

    Set Cmd = Nothing  
    'rs.close: set rs = nothing
    conn.close: set conn = nothing

  5. זהר פלד הגיב:

    והקוד SQL?
    זה לא שאני כזה חטטן, אבל פשוט בלי לראות את הקוד שלך אין לי שום דבר לעזור…

  6. ell הגיב:

    בבקשה

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

    CREATE PROCEDURE [test] (@Result_Desc1 Varchar(20) OUT)AS
    Declare @Counter Int
                    exec test2
                    set @Result_Desc1= 'Hello'
    GO

    CREATE PROCEDURE tttt.test2 AS
                                    Insert
                    Into dbo.Projects_Log   (Project,
                                            Source,
                                            Call_TimeStamp)
                    Values  (1,
                            1,
                            GetDate())
    GO

  7. ell הגיב:

    תודה זהר פתרתי
    אשמח להציג את הדוגמא במאמרים שלכם
    בשביל הדורות הבאים
    איך עושים זאת?

    במקום
    'Set rs = cmd.Execute  

    את זה:
    a=128
    cmd.Execute , , a

    מפני שלא חוזר רקורד סיט
    רק הפרמטר

שלח תשובה