2016-09-19 4 views
0

코드에서 cmdd (@PermissionAccessoageID) 값을 얻고 싶습니다. 어떻게 달성 할 수 있습니까?where 절에서 특정 값을 검색하십시오.

나는 형식 'System.ArgumentException'형식의 예외가 system.data.dll에서 발생했지만 사용자 코드에서 처리되지 않은

이 오류를 얻을

추가 정보 : 없음 매핑 개체 유형에서 존재하지 않는 System.Data.SqlClient.SqlCommand를 알려진 관리 공급자 네이티브 형식으로 변경합니다.

내 코드 :

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

cmdd 유형 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

첫 번째 select 문이 쓸모없는 것 같습니다. 코드에서 아무 곳에서나 결과를 사용하지 마십시오. 두 번째 if 문에서 실행할 필요조차 없습니다. – Marco

답변

0

select 문의 결과를 사용하는 것을 잊어 버리고이를 변수에 할당해야합니다.

첫 번째 블록에서 실제로 실행하지만 결과는 사용하지 않습니다. 귀하의 두 번째 경우에는 .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는 결과가없는 경우 null을 반환 할 수 있으므로 어떤 방식 으로든이를 고려해야합니다. 잘못된 값으로 실행하지 않도록 SProc을 호출하기 전에 다른 if(AccesspageID.HasValue) { } 호출을 추가 할 수 있습니다.

관련 문제