2016-09-19 3 views
0

Я хочу получить значение cmdd (@PermissionAccessoageID) в коде и как это можно добиться.Получить определенное значение в where where в C#

Я получаю эту ошибку

Исключение типа «System.ArgumentException» произошло в System.Data.dll, но не был обработан в пользовательском коде

Дополнительная информация: отображение не существует от типа объекта System.Data.SqlClient.SqlCommand для известного типа управляемого поставщика.

Мой код:

protected void Add_Click(object sender, EventArgs e) 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.AddRange(new DataColumn[1] { new DataColumn("Pages") }); 

    foreach (GridViewRow row in addGridView.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      CheckBox chkRow = (row.Cells[1].FindControl("chkboxaddView") as CheckBox); 
      CheckBox chkRow1 = (row.Cells[2].FindControl("chkboxaddEdit") as CheckBox); 
      string aaa = row.Cells[0].Text; 

      if (chkRow.Checked) 
      { 
       con.Open(); 
       var vaala = chkRow.Checked ? 1 : 0; 
       var vaalaa = chkRow1.Checked ? 1 : 0; 
       var val = chkaddisactive.Checked ? 1 : 0; 
       var vall = chkboxisactive.Checked ? 1 : 0; 
       string sqlcmd = "select AccesspageID From AccessPages where pages='" + row.Cells[0].Text + "'"; 

       SqlCommand cmdd = new SqlCommand(sqlcmd, con); 
       cmdd.CommandType = CommandType.Text; 
       cmdd.ExecuteScalar(); 

       string query = "add3tables";   //Stored procedure name 
       SqlCommand com = new SqlCommand(query, con); //creating SqlCommand object 
       com.CommandType = CommandType.StoredProcedure; //here we declaring command type as stored procedure 

       // adding parameters to SqlCommand below 
       com.Parameters.AddWithValue("@Name", txtaddrolename.Text.ToString()); 
       string unique_string = Guid.NewGuid().ToString(); 
       com.Parameters.AddWithValue("@RoleID ", unique_string); 
       com.Parameters.AddWithValue("@IsActive ", val); 
       com.Parameters.AddWithValue("@PermissionRoleID ", unique_string); 
       com.Parameters.AddWithValue("@View ", vaala); 
       com.Parameters.AddWithValue("@Edit ", vaalaa); 
       com.Parameters.AddWithValue("@PermissionAccessoageID ", cmdd); 

       com.ExecuteNonQuery(); 
       con.Close(); 
      } 

      if (chkRow1.Checked == false) 
      { 
       var vaala = chkRow.Checked ? 1 : 0; 
       var vaalaa = chkRow1.Checked ? 1 : 0; 
       var val = chkaddisactive.Checked ? 1 : 0; 
       var vall = chkboxisactive.Checked ? 1 : 0; 

       SqlCommand cmdd = new SqlCommand("select AccesspageID From AccessPages where pages='" + aaa + "'", con); 
       con.Open(); 

       cmdd.CommandType = CommandType.Text; 
       string query = "add3tables";   //Stored procedure name 
       SqlCommand com = new SqlCommand(query, con); //creating SqlCommand object 
       com.CommandType = CommandType.StoredProcedure; //here we declaring command type as stored procedure 

       // adding parameters to SqlCommand below 
       com.Parameters.AddWithValue("@Name", txtaddrolename.Text.ToString()); 
       string unique_string = Guid.NewGuid().ToString(); 
       com.Parameters.AddWithValue("@RoleID ", unique_string); 
       com.Parameters.AddWithValue("@IsActive ", val); 
       com.Parameters.AddWithValue("@PermissionRoleID ", unique_string); 
       com.Parameters.AddWithValue("@View ", vaala); 
       com.Parameters.AddWithValue("@Edit ", vaalaa); 
       com.Parameters.AddWithValue("@PermissionAccessoageID ", cmdd); 
       com.ExecuteNonQuery(); 
       con.Close(); 
      } 
     } 
+0

Не могли бы вы объяснить, почему вы хотите получить значение cmdd (@PermissionAccessoageID)? Это последняя вставленная строка или что-то еще? –

+0

Cmdd уже вставил ряд в базу данных. Я хочу получить AccesspageID – Vinoth

+0

Ваш первый оператор выбора кажется бесполезным. Вы никогда не используете результат в своем коде. в вашем втором операторе if вы даже не выполняете его. – Marco

ответ

0

Вы забудете использовать свой результат оператора select и должны назначить его переменной.

В вашем первом блоке if вы его фактически выполняете, но не используете результат. В вашем втором блоке вы забыли позвонить .ExecuteScalar().

object oAccesspageID = cmdd.ExecuteScalar(); 
int? AccesspageID = (int?)(!Convert.IsDBNull(oAccesspageID) ? oAccesspageID : null); 
/* ... code ommitted*/ 

//assuming @PermissionAccessoageID is int 
com.Parameters.AddWithValue("@PermissionAccessoageID ", AccesspageID.Value); 

С ExecuteScalar может возвращать нуль, если не было найдено никаких результатов, вы должны учитывать, что в некотором роде. Вы можете добавить еще один вызов if(AccesspageID.HasValue) { } перед вызовом своего SProc, чтобы убедиться, что он не пытается запускать с недопустимыми значениями.

0

Эта линия является вопрос:

com.Parameters.AddWithValue("@PermissionAccessoageID ", cmdd); 

cmdd имеет тип SqlCommand, вы не можете иметь параметр с этим типом.