저장 프로시저 또는 원하는거요 매개변수입니다 기능을 제공하지 않은 것으로 전망하고 있다.

Sql Server 에 데이터를 데이터베이스에 저장 프로시저 호출을 통해 실로나는 삽입하려면 하고, but I am getting 오류

&gt. # 39, & # 39, SHOWuser& 절차 또는 함수 # 39, & # 39, 기대하고 있는 매개변수입니다 @userID& 제공하지 않았습니다.

내 저장 프로시저 호출됨 '쇼우저'. 나는 철저히 점검됩니다 없고 매개변수입니다 누락되었습니다.

내 코드:

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
        SqlConnection dbcon = new SqlConnection(conn);

        try
        { 
            SqlCommand cmd = new SqlCommand();

            cmd.Connection = dbcon;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "SHOWuser";

            cmd.Parameters.AddWithValue("@userName", userName);
            cmd.Parameters.AddWithValue("@password", password);
            cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

            dbcon.Open();

            int i = Convert.ToInt32(cmd.ExecuteScalar());

            cmd.Parameters.Clear();
            cmd.CommandText = "tbl_pref";

            foreach (int preference in preferences)
            {
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
                cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            dbcon.Close();
        }

및 저장 프로시저 입니다.

ALTER PROCEDURE [dbo].[SHOWuser]
(
    @userName varchar(50),
    @password nvarchar(50),
    @emailAddress nvarchar(50)
)
AS
BEGIN
    INSERT INTO tbl_user(userName, password, emailAddress) 
    VALUES (@userName, @password, @emailAddress)

    SELECT
        tbl_user.userID, tbl_user.userName,
        tbl_user.password, tbl_user.emailAddress, 
        STUFF((SELECT ',' + preferenceName 
               FROM tbl_pref_master
               INNER JOIN tbl_preferences ON tbl_pref_master.preferenceID = tbl_preferences.preferenceID
               WHERE tbl_preferences.userID = tbl_user.userID
               FOR XML PATH ('')), 1, 1, ' ' ) AS Preferences
    FROM
        tbl_user

    SELECT SCOPE_IDENTITY();
END

이것은 두 번째 저장 프로시저 'tbl_pref' 에서 사용되는 동일한 기능을:

ALTER PROCEDURE [dbo].[tbl_pref]
    @userID int,
    @preferenceID int
AS
BEGIN
    INSERT INTO tbl_preferences(userID, preferenceID) 
    VALUES (@userID, @preferenceID)
END
질문에 대한 의견 (15)

내 경우 모든 매개 변수 값을 제대로 공급 유형 I 이 명령을 받은 경우에도 예외가 있었다 하지만 지정되지 않았습니다.

cmd.CommandType = System.Data.CommandType.StoredProcedure;

이것은 분명히 아닌 경우도 있지만, 이 경우에는 위의 질문에 idfsysobject. 설명이 별로 없는, 그래서 선택해제합니다 지정하도록 했다.

해설 (3)

어제 여기 왔는지 있지만 아무도 이 문제에 대해 한 점, 그러나, 그들은 이 솔루션이 협력했습니다 정확히요 내게 맞는 방향이다.

우리 워크플로입니다 도구에서는 C # 과 여러 개의 언어로 작성된 응용 프로그램, 지나치게 간편화된 뿐만 아니라, 각 테이블에 대한 메타 데이터 저장 프로시저 데이터베이스에서 사용하는 매개변수입니다 각 저장 프로시저 (이름, 주문, 데이터 형식, 크기 등) 로 만들 수 있게 되어, 여러 가지 새로운 저장 프로시저, 우리가 원하는 대로 변경할 필요 없이 C #.

문제에 대한 우리의 모든 코드는 올바른 매개 변수를 설정하는 것으로 분석 '에서' 객체에는 스크라코먼드 하지만, 이 같은 오류가 잡을라는데 OP 를 던진 후 처형되었다.

일부 매개변수입니다 분석이 더 값이 'null' 한 것으로 드러났다. 그러므로 내가 그어야 할 스크라코먼드 무시하고 '' 그 '' '객체에는 결론을 스크루파람터 객체에는 자파르임터스 값을 갖는' 수집 'null'.

나는 두 가지 방법을 통해 이 문제를 해결할 수 있는 것으로 나타났다.

  1. 그래서 각 매개변수에서 lionbridge 의 저장 프로시저, give a int '을' 에서 '@Parameter 기본값입니다 @Parameter int = NULL' (또는 다른 기본값입니다 필요한 경우).

  2. 개별 객체를 생성하는 코드 '의', '대신' 데브 울드발루 스크루파람터 할당 'null' 는 여기서 원하는 값을 SQL 'NULL' 높여줍니까 트릭.

당초 코드와 함께 솔루션 기반 부호화) 는 본래 기록되었으므로 염두에 두고 이동하지 구매와 몸무게 1 위로 i& # 39 의 장점을 모두 생각한다, ll 치중한다는 해결 방법 1. # 39 의 it& 훨씬 쉽습니다 지정하십시오라는 특정 저장 프로시저 쓸 때 항상 기본값입니다 이 아닌 'NULL' 에 정의된 코드를 있다.

누군가 도움이 되길 바란다.

해설 (3)
해결책

네 5 매개변수입니다 입력으로 저장 프로시저 있을 것으로 보고 있다.

@userID int, 
@userName varchar(50), 
@password nvarchar(50), 
@emailAddress nvarchar(50), 
@preferenceName varchar(20) 

그래서 이 SP 호출하십시오 5 매개변수입니다 모두 추가 합니다.

    cmd.CommandText = "SHOWuser";
    cmd.Parameters.AddWithValue("@userID",userID);
    cmd.Parameters.AddWithValue("@userName", userName);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.Parameters.AddWithValue("@emailAddress", emailAddress);
    cmd.Parameters.AddWithValue("@preferenceName", preferences);
    dbcon.Open();

PS: # 39, s not what these 매개변수입니다 it& 선택해제합니다 위한 것입니다. # 39 에 따라서, SP, SP 바디입니다 don& 있습니다 t 이러한 매개변수를 사용하여 /dev/raw/raw200 같습니다.

ALTER PROCEDURE [dbo].[SHOWuser] AS BEGIN ..... END
해설 (6)

내 경우 출력 매개 오류가 있더라도 난 나는 attaboy 를 설정하면 C # 에서 제대로 I forgot to give a 에 대한 기본값과 때는기대어 생각했어요 아웃해야 저장 프로시저 출력 매개

ALTER PROCEDURE [dbo].[test]
(
                @UserID int,
                @ReturnValue int = 0 output --Previously I had @ReturnValue int output
)
해설 (0)

내 경우, 임의의 값을 다시 돌아온 것은 1 개의 출력 매개 않았다. 그래서 변경일 迈向

param.Direction = ParameterDirection.Output;
command.ExecuteScalar();

그리고 그것은 던지기 크기 오류. 그래서 아니라 크기를 설정할 수 있었다.

SqlParameter param = new SqlParameter("@Name",SqlDbType.NVarChar);
param.Size = 10;
해설 (0)