指定的强制转换对sql server查询无效

时间:2014-03-28 00:04:13

标签: c# asp.net sql sql-server

我有一个带有两个字段的sql server数据库(id(int,identity = yes),fake(char(10)))

(“假”字段就在那里,因为我无法弄清楚如何只获得一个新的id值而不先将其他东西插入到另一列中。最终我想要的只是增量的唯一ID。)

当我在Server Management Studio中运行以下SQL时,我得到了我期望和想要的内容......

INSERT INTO [CMSCustom].[dbo].[sup_req_ids](fake) VALUES ('a'); SELECT SCOPE_IDENTITY()

当我在ASP.NET页面中运行以下c#代码时,它给出了“指定的强制转换无效”错误...

protected int insertRequest()
{
    int modified = 0;
    string sql = "Insert into sup_req_ids (fake)  Values('a');SELECT SCOPE_IDENTITY()";

    string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["Ektron.CMSCustom"].ToString();

    using(SqlConnection conn = new SqlConnection(connStr))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        try
        {
            conn.Open();
            modified = (int)cmd.ExecuteScalar();
        }
        catch (Exception e)
        {
            Response.Write(e.Message);
            Response.Write(e.StackTrace);
            Response.Write(e.Source);
        }   
   } 
    return modified;
}

堆栈跟踪没有给我一个行号,所以我不确定这个错误来自哪里。

任何人都可以帮忙解释我哪里出错吗?

1 个答案:

答案 0 :(得分:4)

scope_identity()会返回小数(因为标识列不一定是int)。

将其解压缩为小数,然后转换为int:

modified = (int)(decimal)cmd.ExecuteScalar();

此外,您可以插入只包含如下标识列的表:

insert [CMSCustom].[dbo].[sup_req_ids] default values;
select scope_identity()