【发布时间】:2016-10-03 06:02:58
【问题描述】:
我想在代码中获取 cmdd(@PermissionAccessoageID) 值以及如何实现。
我收到此错误
System.Data.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理
附加信息:不存在从对象类型 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();
}
}
【问题讨论】:
-
能否详细说明为什么要获取 cmdd(@PermissionAccessoageID) 的值?是最后插入的行还是其他?
-
Cmdd 已在数据库中插入行。我想检索 AccesspageID
-
您的第一个 select 语句似乎没用。您永远不会在代码中的任何地方使用结果。在你的第二个 if 语句中,你甚至不执行它。
-
@Vinoth
add3tables是什么?你想在这里做什么?您使用SqlCommandAPI 是完全错误的方式!参数需要出现在您正在执行的查询中。这不是你的情况。 -
旁注:在 for 循环中访问数据库是提高效率的红灯。如果您有其他选择,那就更好了。