当前位置: 首页 > 面试题库 >

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

公西星文
2023-03-14
问题内容

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

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是一个整数,但您正在分配一个字符串。因此,这可能会解决它:

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

编辑:由于您已评论该会话存储了用户名,但该NgoId列是一个int列,因此您有三个选择:

  1. 更改会话以存储用户标识int而不是名称
  2. 更改列以存储用户名
  3. 从存储用户名的表中选择用户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);
    // ...
}


 类似资料:
  • 问题内容: 我创建了一个过程并收到了此消息 将varchar值’%’转换为数据类型int时,转换失败。 我不知道这可能是什么,但是当我将过程更改为这样时: 似乎工作正常。我是SQL的新手,所以可以得到任何帮助,也许有更好的方法来做我想做的事情? 问题答案: 这是在子句中: 是一个整数。因此,您需要将其转换为字符串: 为什么要使用称为的列是可疑的。也许您只想要:

  • 问题内容: 尝试运行SQL查询时出现此错误… 将varchar值’Id’转换为数据类型int时转换失败 请帮我 :( 问题答案: 在您的情况下,请确保一列是类型,另一列是类型。 由于优先级高于,因此列将隐式转换为 因此,将列明确转换为varchar。 我已经考虑了如果不是的类型,然后转换为

  • 问题内容: 我尝试搜索与此相关的以前的文章,但是找不到适合我情况的文章。而且由于我是StackOverflow的新手,所以我无法发布图片,所以我将尝试对其进行描述。 我有两个数据集。一个是34行,占所有s的1列。其他13行,其中1列为s。 当我同时尝试这两个时,出现以下错误: 将varchar值转换为int数据类型时,转换失败。 我不明白为什么会收到此错误。我之前编辑过许多列和许多其他类型的列,但

  • 问题内容: 我已经搜索了这个很棒的论坛并在Google周围搜索,但无法解决。 我们有两个表(相信我,我与这些表无关)。这两个表都有一个名为的列。 然而,在一个表中,数据类型就是和在另一个表中,这是。 我们从选择这里被定义为和保存该ID写入其中被定义为。 作为数据类型descrepancy的结果,我们得到错误转换数据类型来。 在不弄乱数据库的情况下,我想强制使用摆脱该错误。 有什么想法我在下面的代码

  • 问题内容: 我正在尝试使用存储过程基于varchar类型的“名称”列的输入值来返回“项目”表的“ ItemId”列值,但是每当我将任何值传递给存储过程时,它都会向我返回错误: 将数据类型varchar转换为int时出错。 这就是我所说的: 问题答案: 您必须匹配参数:RETURN不会填充OUTPUT参数:您对@itemid的赋值可以做到这一点。 另外,您存储的过程太复杂了。对于从存储的proc返回

  • 我在Pandas中读取了一个SQL查询,虽然值是字符串、日期和整数,但它们是作为dtype“object”输入的。我能够将日期“对象”转换为datetime数据类型,但在尝试转换字符串和整数时出错。 以下是一个例子: 将转换为日期时间有效: 但我在尝试将转换为整数时出错: 注意:我得到一个类似的错误,当我尝试 当试图转换为字符串时,似乎什么也没有发生。