检索特定值在哪里在 c# 中的子句

标签: Asp.net C#
发布时间: 2017/2/25 3:24:24
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要 cmdd (@PermissionAccessoageID) 值在代码中,如何能够做到这一点。

我得到这个错误

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

解决方法 1:

你忘了使用您的 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,如果没有结果,你需要考虑,以某种方式。你可能想要添加另一个 if(AccesspageID.HasValue) { } 调用之前调用你的存储过程,以确保它不会尝试运行具有无效值。

赞助商