簡體   English   中英

錯誤代碼:過程指定了太多參數

[英]Error CODE : procedure has too many arguments specified

我有一個此SQL Server存儲過程。 當我執行它時,出現此錯誤:

SQL Server過程指定了太多參數

我怎么解決這個問題? 代碼如下所示。

當我的存儲過程正在運行時,我需要檢查記錄是否存在,然后再添加記錄。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[Insert_MS] 
    (@SID char(20),
     @CREATE_DATETIME char(14),
     @MODIFY_DATETIME char(14),
     @CREATOR_SID char(20), 
     @MODIFIER_SID char(20), 
     @MARK_DELETED char(1), 
     @TARGET_SID nvarchar(20),
     @TARGET_CODE nvarchar(50),
     @UNIT nvarchar(100),
     @SPECIFICATION nvarchar(1000),
     @MATERIALS_SUBCAT nvarchar(1000),
     @SORT int,
     @SET_UNIT nvarchar(1000),
     @ENABLED char(1),
     @MARKET_TYPE nvarchar(2)
    ) 
AS 
BEGIN 
    IF EXISTS (SELECT * 
               FROM [dbo].[M_S] 
               WHERE [MARKET_TYPE] = @MARKET_TYPE 
                 AND [TARGET_CODE] = @TARGET_CODE 
                 AND [TARGET_SID] = @TARGET_SID) 
    BEGIN 
        --update existing record 
        UPDATE [dbo].[M_S] 
        SET [MATERIALS_SUBCAT] = @MATERIALS_SUBCAT , 
            [SPECIFICATION] = @SPECIFICATION, 
            [UNIT] = @UNIT
        WHERE [MARKET_TYPE] = @MARKET_TYPE 
          AND [TARGET_CODE] = @TARGET_CODE 
          AND [TARGET_SID] = @TARGET_SID 
    END 
    ELSE 
    BEGIN 
        --insert new record 
        INSERT INTO [dbo].[M_S] ([SID], [CREATE_DATETIME], [MODIFY_DATETIME], 
                                 [CREATOR_SID], [MODIFIER_SID], [MARK_DELETED], 
                                 [TARGET_SID], [TARGET_CODE], [UNIT], [SPECIFICATION], 
                                 [MATERIALS_SUBCAT], [SORT], [SET_UNIT],
                                 [ENABLED], [MARKET_TYPE]) 
        VALUES (@SID, @CREATE_DATETIME, @MODIFY_DATETIME,
                @CREATOR_SID, @MODIFIER_SID, @MARK_DELETED,
                @TARGET_SID, @TARGET_CODE, @UNIT,
                @SPECIFICATION, 
                @MATERIALS_SUBCAT, @SORT, @SET_UNIT,
                @ENABLED, @MARKET_TYPE) 
    END 
END

然后我的aspx.cs代碼在這里

cnn.Open();

insertSql += " INSERT INTO [dbo].[MATERIALS_SUBCAT] ([SID],[CREATE_DATETIME], [MODIFY_DATETIME],";
insertSql += "  [CREATOR_SID], [MODIFIER_SID], [MARK_DELETED],[TARGET_SID], [TARGET_CODE],";
insertSql += "  [UNIT], [SPECIFICATION], [MATERIALS_SUBCAT], [SORT],[SET_UNIT], [ENABLED], [MARKET_TYPE])";
insertSql += " VALUES (@SID, @CREATE_DATETIME, @MODIFY_DATETIME, @CREATOR_SID, @MODIFIER_SID, @MARK_DELETED, @TARGET_SID, @TARGET_CODE, @UNIT, @SPECIFICATION,";
insertSql += "@MATERIALS_SUBCAT, @SORT, @SET_UNIT, @ENABLED, @MARKET_TYPE)  ";

SqlCommand cmdStoredProcedure = new SqlCommand("Insert_MS", cnn);
cmdStoredProcedure.CommandType = CommandType.StoredProcedure;

for (int k = 0; k <= dt_sheet.Rows.Count - 1; k++)
{
    cmdStoredProcedure.Parameters.AddWithValue("@SID", dt_sheet.Rows[k]["SID"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@CREATE_DATETIME", dt_sheet.Rows[k]["CREATE_DATETIME"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@MODIFY_DATETIME", dt_sheet.Rows[k]["MODIFY_DATETIME"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@CREATOR_SID", dt_sheet.Rows[k]["CREATOR_SID"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@MODIFIER_SID", dt_sheet.Rows[k]["MODIFIER_SID"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@MARK_DELETED", dt_sheet.Rows[k]["MARK_DELETED"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@TARGET_SID", dt_sheet.Rows[k]["分類代碼"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@TARGET_CODE", dt_sheet.Rows[k]["品項代碼"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@UNIT", dt_sheet.Rows[k]["單位"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@SPECIFICATION", dt_sheet.Rows[k]["規格"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@MATERIALS_SUBCAT", dt_sheet.Rows[k]["品項名稱"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@SORT", dt_sheet.Rows[k]["SORT"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@SET_UNIT",null);
    cmdStoredProcedure.Parameters.AddWithValue("@ENABLED", dt_sheet.Rows[k]["ENABLED"].ToString());
    cmdStoredProcedure.Parameters.AddWithValue("@MARKET_TYPE", dt_sheet.Rows[k]["MARKET_TYPE"].ToString());

    cmdStoredProcedure.ExecuteNonQuery();
    cnn.Close();
}

似乎您希望在每次循環工作表時都執行存儲過程。 將命令移到循環中,並使用“ using”每次輕松配置命令,如下所示:

 for (int k = 0; k <= dt_sheet.Rows.Count - 1; k++)
      {
        using (SqlCommand cmdStoreProcedure = new SqlCommand("Insert_MS", cnn))
        {
          cmdStoreProcedure.CommandType = CommandType.StoredProcedure;
          cmdStoreProcedure.Parameters.AddWithValue("@SID", dt_sheet.Rows[k]["SID"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@CREATE_DATETIME", dt_sheet.Rows[k]["CREATE_DATETIME"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@MODIFY_DATETIME", dt_sheet.Rows[k]["MODIFY_DATETIME"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@CREATOR_SID", dt_sheet.Rows[k]["CREATOR_SID"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@MODIFIER_SID", dt_sheet.Rows[k]["MODIFIER_SID"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@MARK_DELETED", dt_sheet.Rows[k]["MARK_DELETED"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@TARGET_SID", dt_sheet.Rows[k]["分類代碼"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@TARGET_CODE", dt_sheet.Rows[k]["品項代碼"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@UNIT", dt_sheet.Rows[k]["單位"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@SPECIFICATION", dt_sheet.Rows[k]["規格"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@MATERIALS_SUBCAT", dt_sheet.Rows[k]["品項名稱"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@SORT", dt_sheet.Rows[k]["SORT"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@SET_UNIT", null);
          cmdStoreProcedure.Parameters.AddWithValue("@ENABLED", dt_sheet.Rows[k]["ENABLED"].ToString());
          cmdStoreProcedure.Parameters.AddWithValue("@MARKET_TYPE", dt_sheet.Rows[k]["MARKET_TYPE"].ToString());
          // connection.Open();
          cmdStoreProcedure.ExecuteNonQuery();
        }
      }
      cnn.Close();

您的代碼嘗試訪問SQL Commmand: Insert_Materials_SubCategory而顯示的過程稱為: Insert_MS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM