2016-09-19 49 views
0

我想要在代码中获取cmdd(@PermissionAccessoageID)值,以及如何实现这一点。在c#中的where子句中检索特定值

我得到这个错误

类型“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块中,你实际执行它,但不要使用结果。在你的第二个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可以返回空值,如果没有结果被发现,你需要考虑以某种方式。您可能需要在调用SProc之前添加另一个if(AccesspageID.HasValue) { }调用,以确保它不会尝试以无效值运行。

0

此行是问题:

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

cmddSqlCommand类型的,你可以没有与该类型的参数。