【问题标题】:Add Stored Procedure Parameter into sqlDataSource, msSQL将存储过程参数添加到 sqlDataSource、msSQL
【发布时间】:2012-04-25 19:51:56
【问题描述】:

我想在 mssql 中使用存储过程插入一个值。这是我的存储过程:

ALTER PROCEDURE dbo.insertNewMember 
(@name varchar(30), 
@age int )
AS
BEGIN 
    INSERT INTO member(memId, name, age) VALUES ('', @name, @age);
END 

我的 C# 代码,使用这个过程:

addStaffSql.InsertCommand = "insertNewMember";
addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
addStaffSql.InsertParameters.Add("@name", name);
addStaffSql.InsertParameters.Add("@age", age);
addStaffSql.Insert();

但是我在运行程序时遇到以下错误:

Procedure or function 'insertNewMember' expects parameter '@name', which was not supplied.

如果您有任何想法,我将不胜感激。

【问题讨论】:

    标签: c# sql-server stored-procedures sqldatasource


    【解决方案1】:

    尝试在 Add() 方法中丢失“@”符号。

    addStaffSql.InsertCommand = "insertNewMember";
    addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
    addStaffSql.InsertParameters.Add("name", name);
    addStaffSql.InsertParameters.Add("age", age);
    addStaffSql.Insert();
    

    【讨论】:

    • 由于这个解决方案,给出了这个错误消息:“字符串或二进制数据将被截断。语句已终止。”
    • @Shnkc 您的 SP 显示“name”的数据类型是 varchar(30),这可能是导致问题的原因。检查您传递给过程的字符串的长度。
    【解决方案2】:

    我猜你是在名为 name 的变量中传递 null。您可能需要为此更改代码。

    if(name!=null)
    {
       addStaffSql.InsertCommand = "insertNewMember";
       addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
       addStaffSql.InsertParameters.Add("@name", name);
       addStaffSql.InsertParameters.Add("@age", age);
       addStaffSql.Insert();
    }
    else
    {
      //Send message back to user that name is not filled properly !
    }
    

    【讨论】:

    • 我检查了所有变量。如果我使用这个查询:"addStaffSql.InsertCommand = "INSERT INTO member(name, age) VALUES('" + name + "' , '" + age + "')";",它被成功评估。但是我需要使用我还没有成功的存储过程来完成它
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2021-05-24
    相关资源
    最近更新 更多