2015-01-14 5 views
-1

У меня есть код при нажатии кнопки. Когда я запускаю этот код, я получаю сообщение об ошибке, какСледующий параметр не указан

Параметризованный запроса '(@CatName NVARCHAR (9), @ PARENT_ID INT) Вставить в tbl_Category (Ca' ожидает параметр '@Parent_Id', который был не входит в комплект.

Моя логика здесь

Если я выбираю значение выпадающего списка и добавить текст, а затем нажмите кнопку отправки, значение текстового поля будет значение Дитя выбранное значение из DropDownList См. Код: -

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

Дайте мне знать где ошибка?

+3

Есть ли разница между 'ParentId' и' (ParentId! = Null? ParentId: null); '?!? –

ответ

3

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

Но когда я выбираю значение из раскрывающегося списка, оно не становится дочерним элементом выбранного значения –

+0

@RahulSutar: вы просите нас исправить вашу логику или исправить ошибку базы данных? –

+0

Я хочу исправить эту логику, поскольку значение вставлено, но оно не отображается в таблице, как ожидалось –

1

Изменить ваш код, как это: -

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

Проблема в коде заключается в том, что ternary operator не может определить тип возврата, потому что вы либо возвращаете значение int, либо значение null, которые явно несовместимы. Таким образом, вы можете использовать оператор Null Coalesce.

+0

Получение ошибки как 'Этот класс не может быть унаследован' –

+0

@RahulSutar - Какой класс? Как вы можете видеть, я изменил только одну строку, то есть я только что представил класс «DBNull», который присутствует в пространстве имен System, и я уверен, что ваш код включает это пространство имен. Таким образом, ваша ошибка имеет какое-то отношение к вашему коду. –

+0

Вы хотите увидеть код –

Смежные вопросы