我在代码隐藏中收到转换失败的错误。我的代码如下:
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是一个整数,但您正在分配一个字符串。因此,这可能会解决它:
NgoId
var p = new SqlParameter("@NgoId", SqlDbType.int).Value = int.Parse(Convert.ToString(Session["User"])); cmd.Parameters.Add(p);
编辑:由于您已评论该会话存储了用户名,但该NgoId列是一个int列,因此您有三个选择:
int
我宁愿选择第一个还是最后一个选项。
如果您还喜欢最后一种方法,则可以使用此方法:
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); // ... }