将nvarchar值转换为数据类型int时转换失败

时间:2015-04-14 15:27:45

标签: c# sql asp.net

我在代码隐藏中遇到转换失败的错误。我的代码如下:

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时转换失败。

这里必须做些什么改变?

2 个答案:

答案 0 :(得分:1)

我猜NgoId是一个int,但是你要分配一个字符串。所以这可能会解决它:

var p = new SqlParameter("@NgoId", SqlDbType.int).Value = int.Parse(Convert.ToString(Session["User"]));
cmd.Parameters.Add(p);

编辑:既然您已注释会话存储用户名,但NgoId是一个int-column,您有三个选项:

  1. 更改会话以存储用户ID int而不是名称
  2. 更改列以存储用户名
  3. 从存储用户名的表中选择用户ID。
  4. 我会选择第一个或最后一个选项。

    如果你也喜欢最后一种方法,这是有效的:

    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);
        // ...
    }
    

答案 1 :(得分:0)

试试这个:

cmd.Parameters.Add("@NgoId", SqlDbType.Int).Value = Convert.ToString(Session["User"]);

这会将NgoId参数强制转换为SQL Server int数据类型。