繁体   English   中英

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

[英]Conversion failed when converting the nvarchar value 'A' to data type int

nvarchar值'A'转换为数据类型int时,转换失败。

private void linksdetail(string id)
{
    SqlConnection con = new SqlConnection(con_string);
    con.Open();

    SqlCommand cmd = new SqlCommand(" select a.solution_title,b.solution_sub_id,b.solutions_id,a.url from cms_solution_viewnew a, cms_solution_viewnew b where a.row_id = b.solution_sub_id  and b.solutions_id='" + id + "'", con);

    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {

        HyperLink1.Text = dr["solution_title"].ToString();

        HyperLink1.NavigateUrl = dr["url"].ToString();

    }
    dr.Close();
    con.Close();
}

如何解决,请帮帮我。

solutions_id列数据类型为整数类型,id值为9

错误消息很容易解释。 您尝试将字符序列分配给int类型的列。 根据示例值,您无需在数字列中使用单引号。 你可以改变你的

b.solutions_id = '" + id + "'"

b.solutions_id = " + id

但最好使用参数化查询 这类字符串连接对SQL注入攻击开放。 也可以使用using语句自动处理SqlConnectionSqlCommandSqlDataReader而不是手动调用Close方法。

using(var con = new SqlConnection(con_string))
using(var cmd = con.CreateCommand())
{
    cmd.CommandText = "select a.solution_title,b.solution_sub_id,b.solutions_id,a.url from cms_solution_viewnew a, cms_solution_viewnew b where a.row_id = b.solution_sub_id  and b.solutions_id = @id";
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
    con.Open();
    using(var dr = cmd.ExecuteReader())
    {
        // Do your stuff
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM