【问题标题】:Error- Procedure or function 'hrm_Langauges' expects parameter '@CreatedOn', which was not supplied错误 - 过程或函数“hrm_Langauges”需要参数“@CreatedOn”,但未提供该参数
【发布时间】:2014-05-05 05:17:05
【问题描述】:

我正在尝试从网格中删除记录但收到此错误。

不知道为什么会出现这个错误。

这是我的代码:

ALTER PROCEDURE [dbo].[hrm_Langauges]
(
    @Name varchar(120),
    @CreatedOn datetime,
    @UpdatedOn datetime,
    @CreatedBy bigint=0,
    @UpdatedBy bigint=0,
    @IsDeleted bit=0,
    @status as varchar(50)
)
AS
BEGIN
    BEGIN TRANSACTION
        DECLARE @ID int;
        SELECT @ID = coalesce((select max(ID) + 1 from Languages), 1)
    COMMIT   

    if(@status = 'Display')
    BEGIN
        SELECT * FROM [dbo].[Languages];
    END
    else if(@status = 'Add')
    BEGIN
        IF EXISTS(SELECT Name FROM [dbo].[Languages] WHERE Name = @Name)
    Begin
    Return 0
    End
    Else
        INSERT INTO [dbo].[Languages](Name,CreatedOn,CreatedBy) VALUES(@Name,@CreatedOn,@CreatedBy)
    END
    else if(@status = 'Update')
    BEGIN
        UPDATE [dbo].[Languages] Set Name=@Name,UpdatedOn=@UpdatedOn WHERE ID=@ID
    END
    else if(@status = 'Delete')
    BEGIN
        DELETE FROM [dbo].[Languages] WHERE NAME=@NAME
    END
END

这是我的删除记录代码

string strcon = ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString;
SqlCommand command;
protected void Page_Load(object sender, EventArgs e)
{
    tblAdd.Visible = false;
    Label1.Visible = false;
    //GridView1.DataBind();
    if (!Page.IsPostBack)
        {
            fillLanguageGrid();
        }
}

public void fillLanguageGrid()
    {   
        GridView1.DataSourceID = "SqlDataSource1";
        GridView1.DataBind(); 
    }

protected void btnDelete_Click(object sender, EventArgs e)
{
    foreach (GridViewRow gvrow in GridView1.Rows)
    {
        CheckBox chkdelete = (CheckBox)gvrow.FindControl("chk");
        if (chkdelete.Checked)
        {
            string name= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex].Values["Name"].ToString());
           // command.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar, 50));
            deleteRecordByName(name);
        }
    }
    fillLanguageGrid();
}

public void deleteRecordByName(string Name)
{
    SqlConnection sqlConnection = new SqlConnection(strcon);
    using (SqlCommand command = new SqlCommand("[dbo].[hrm_Langauges]", sqlConnection))
    {
        //  define this to be a stored procedure
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar, 50));
        // define the parameter and set its value
        command.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar)).Value = Name;
        command.Parameters["@status"].Value = "Delete";
        //open connection, execute DELETE query, close connection
        sqlConnection.Open();
        command.ExecuteNonQuery();
        sqlConnection.Dispose();
    }

}

谁能建议我的 sp 不正确或我的 asp.net 代码。

执行代码时出现错误:

过程或函数“hrm_Langauges”需要参数“@CreatedOn”,但未提供该参数。

【问题讨论】:

  • 阅读错误信息! 然后查看您的存储过程 - 它需要一个参数 @CreatedOn DATETIME。查看调用它的 C# 代码 - 它是否为 @CreatedOn 创建了一个 SqlParameter 并为它提供了一个值??????
  • 删除记录不需要传那个参数。
  • 如果它是在参数存储过程列表中定义的 - 那么它必须提供

标签: asp.net sql-server gridview stored-procedures


【解决方案1】:

您需要为每个参数传递默认值。

更改您的代码

来自

 @Name varchar(120),
@CreatedOn datetime,
@UpdatedOn datetime,
@CreatedBy bigint=0,
@UpdatedBy bigint=0,
@IsDeleted bit=0,
@status as varchar(50)

@Name varchar(120),
@CreatedOn datetime=0,
@UpdatedOn datetime=0,
@CreatedBy bigint=0,
@UpdatedBy bigint=0,
@IsDeleted bit=0,
@status as varchar(50)

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 2020-12-14
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多