我的代码隐藏中出现转换失败的错误。我的代码如下:
using (SqlCommand cmd = new SqlCommand((tempUsertype == "0" ? "Select * from tbl_students" : "Select * from tbl_students where Id in (Select Id from tbl_students where NgoId=@NgoId)"), conn))
{
cmd.Parameters.AddWithValue("@NgoId", Convert.ToString(Session["User"]));
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
ddlStudent.DataValueField = ds.Tables[0].Columns["Id"].ToString();
ddlStudent.DataTextField = ds.Tables[0].Columns["first_name"].ToString();
ddlStudent.DataSource = ds.Tables[0];
ddlStudent.SelectedIndex = 0;
if (Session["UserType"] == "1" || Session["UserType"] == "2")
{
ddlStudent.Enabled = false;
}
else
{
ddlStudent.Items.Insert(0, new ListItem() { Text = "--Select NGO--", Value = "0" });
ddlStudent.Enabled = true;
}
}
我收到以下错误:
将 nvarchar 值转换为数据类型 int 时转换失败。
这里必须进行哪些更改?
我猜可能是NgoId
是一个 int 但你正在分配一个字符串。所以这可能会解决它:
var p = new SqlParameter("@NgoId", SqlDbType.int).Value = int.Parse(Convert.ToString(Session["User"]));
cmd.Parameters.Add(p);
编辑:因为您已经评论说会话存储用户名,但NgoId
是一个 int-column 你有三个选择:
- 更改会话以存储用户 ID
int
而不是名字
- 更改存储用户名的列
- 从存储用户名的表中选择用户 ID。
我更喜欢第一个或最后一个选项。
如果您也喜欢最后一种方法,则此方法有效:
string sql = "Select * from tbl_students";
if(tempUsertype != "0")
{
sql = @"Select s.*
from tbl_students s
where s.NgoId in (Select u.NgoId
from tbl_User u
where u.username = @Username)";
}
using (var cmd = new SqlCommand(sql, conn))
{
var p = new SqlParameter("@Username", SqlDbType.varchar);
p.Value = Convert.ToString(Session["User"]);
cmd.Parameters.Add(p);
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)