未提供以下参数

时间:2015-01-14 09:29:00

标签: c# sql asp.net

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

  

参数化查询'(@ CatName nvarchar(9),@ Parent_Id int)插入到tbl_Category(Ca'期望参数' @ Parent_Id',这是   没提供。

我的逻辑是

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

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();
        }
    }
}

请告诉我错误在哪里?

2 个答案:

答案 0 :(得分:3)

通过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();
        }
    }
}

答案 1 :(得分:1)

更改您的代码如下: -

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

代码中的问题是ternary operator无法确定返回类型,因为您要么返回int值或null值,这显然是不兼容的。因此,您可以使用Null Coalesce运算符。