未提供以下参数

Following Parameter was not supplied

我有一个按钮点击代码。当我 运行 此代码时,出现错误

The parameterized query '(@CatName nvarchar(9),@Parent_Id int)Insert into tbl_Category(Ca' expects the parameter '@Parent_Id', which was not supplied.

我的逻辑是

如果我 select 下拉列表的值并添加文本,然后单击提交按钮,文本框值将成为下拉列表中选定值的子值。请看代码:-

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string ParentId = null;

    if (ddlCategory.SelectedIndex != 0)
    {
        ParentId = ddlCategory.SelectedValue;
    }
    string query = "Insert into tbl_Category(CatName,Parent_Id) values (@CatName,@Parent_Id)";
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultSQLConnectionString"].ConnectionString))
    {
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            command.Parameters.Add("@CatName", SqlDbType.NVarChar).Value = txtAddCategories.Text;
            command.Parameters.Add("@Parent_Id", SqlDbType.Int).Value = (ParentId != null ? ParentId : null);
            connection.Open();
            command.ExecuteNonQuery();
        }
    }
}

请告诉我错误在哪里?

传递 DBNull.Value 而不是 null 并传递正确的类型(int 而不是 string):

object pID = DBNull.Value;
if(ParentID != null) pID = int.Parse(ParentId);
command.Parameters.Add("@Parent_Id", SqlDbType.Int).Value = pID;

因为有些混乱(见评论和聊天),这里是完整的代码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string ParentId = null;

    if (ddlCategory.SelectedIndex != 0)
    {
        ParentId = ddlCategory.SelectedValue;
    }
    string query = "Insert into tbl_Category(CatName,Parent_Id) values (@CatName,@Parent_Id)";
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultSQLConnectionString"].ConnectionString))
    {
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            command.Parameters.Add("@CatName", SqlDbType.NVarChar).Value = txtAddCategories.Text;
            object pID = DBNull.Value;
            if(ParentID != null) pID = int.Parse(ParentId);
            command.Parameters.Add("@Parent_Id", SqlDbType.Int).Value = pID;
            connection.Open();
            command.ExecuteNonQuery();
        }
    }
}

像这样更改您的代码:-

command.Parameters.Add("@Parent_Id", SqlDbType.Int).Value = ParentId ?? DBNull.Value;

您的代码中的问题是 ternary operator 无法确定 return 类型,因为您正在 returning 一个 int 值或 null 值,这显然是不兼容的。因此,您可以改用 Null Coalesce 运算符。