首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在我使用存储过程连接到SQL Server之后,我得到了一个关于'ExecuteNonQuery‘的错误,为什么?

在我使用存储过程连接到SQL Server之后,我得到了一个关于'ExecuteNonQuery‘的错误,为什么?
EN

Stack Overflow用户
提问于 2018-07-13 03:35:01
回答 2查看 70关注 0票数 1

我打开我的SqlConnection,然后使用一个foreach循环来收集数据和我的存储过程。我使用Parameters.AddWithValue将数据发送到我的存储过程中,但一直收到错误

System.Data.SqlClient.SqlException:‘过程或函数spInsertLeafPickup指定的参数太多。

有什么原因吗?

存储过程:

代码语言:javascript
复制
CREATE TYPE Templeafpickup AS TABLE 
   (
       ID INT PRIMARY KEY,
       Address NVARCHAR(50),
       SeasonType NVARCHAR(50),
       NextPickupdate NVARCHAR(10)
   )

CREATE PROCEDURE spInsertLeafPickup
     @Templeafpickup Templeafpickup READONLY
AS
BEGIN
    INSERT INTO LeafPickup([ID], [Address], [SeasonType], [NextPickupdate])
        SELECT
            [ID], [Address], [SeasonType], [NextPickupdate]  
        FROM
            @Templeafpickup
END

C#类:

代码语言:javascript
复制
string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

using (SqlConnection con1 = new SqlConnection(cs))
{
    con1.Open();

    foreach (DataRow dr1 in dt.Rows)
    {
        SqlCommand cmd = new SqlCommand("spInsertLeafPickup", con1);
        cmd.CommandType = CommandType.StoredProcedure;

        //Insert stored procedure
        cmd.Parameters.AddWithValue("@Address", dr1["PCOMBINED"]);
        cmd.Parameters.AddWithValue("@SeasonType", dr1["PSSSTREET"]);
        cmd.Parameters.AddWithValue("@NextPickupdate", dr1["ZST"]);

        cmd.ExecuteNonQuery(); <= Error System.Data.SqlClient.SqlException: 'Procedure or function spInsertLeafPickup has too many arguments specified.'
    }

    con1.Close();
}
EN

回答 2

Stack Overflow用户

发布于 2018-07-13 03:46:21

您正在通过c#代码发送3个参数,但您仅在存储过程中声明了1个参数。请检查存储过程是如何定义的。https://www.mssqltips.com/sqlservertutorial/160/sql-server-stored-procedure-tutorial/

代码语言:javascript
复制
   create proc spInsertLeafPickup
   @Address varchar, 
@SeasonType int,
@NextPickupdate date
   As 
   Begin 
   insert into LeafPickup([ID],[Address],[SeasonType],[NextPickupdate])
   Values(NEWID(),@Address,@SeasonType,@NextPickupdate]
   End
票数 4
EN

Stack Overflow用户

发布于 2018-07-13 04:22:24

如果LeafPickup的表定义将ID作为整数和标识,则如下所示:

代码语言:javascript
复制
Create Table dbo.LeafPickup 
   (
   ID int IDENTITY(1,1) NOT NULL primary key,
   Address nvarchar(50),
   SeasonType nvarchar(50),
   NextPickupdate nvarchar(10)
   )

那么您存储的proc将不会插入ID -它将自动为您生成。所以存储的proc应该是:

代码语言:javascript
复制
create proc dbo.spInsertLeafPickup
   @Address nvarchar(50), 
   @SeasonType nvarchar(50),
   @NextPickupdate nvarchar(10)
   As 
   Begin 
      insert into LeafPickup(Address, SeasonType, NextPickupdate)
      Values(@Address, @SeasonType, @NextPickupdate]
   End
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51313219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档