public static int GetScalar(string sql,int nType, params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand(sql, Connection);
            if (nType == 0)
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }
            if (nType == 1)
            {
                cmd.CommandType = CommandType.Text;
            
            }
            cmd.Parameters.AddRange(values);
            int result = Convert.ToInt32(cmd.ExecuteScalar());
            return result;
        }存储过程 中最后加上select @@rowcount
执行方法报错 从数据类型 nvarchar 转换为 int 时出错。这个是怎么回事?

解决方案 »

  1.   

    你之前是不是有select 如果有那你取到的就是select 的第一个字段值。
      

  2.   

     这个存数过程中只有一个select  语句 
    Create proc [dbo].[Proc_UpdateNewsInfo]
    (
    @News_id int,
    @News_title int,
    @Admin_id int,
    @News_content text
    )
    as
    update Tb_News set News_title=@News_title,Admin_id=@Admin_id,
    News_content=@News_content where News_id=@News_id
    select @@rowcount
      

  3.   

    int result = Convert.ToInt32(cmd.ExecuteScalar());
    应该是这句 无法转换,ExecuteScalar()执行结果是个字符串..
      

  4.   

    ExecuteScalar返回第一行和第一列的值
    int i= (int)cmd.ExecuteScalar();
    检查存储过程数据类型
      

  5.   


    我的model类里用的是string  数据库用的varchar如果@News_title nvarchar(200), 这样改的话 好多地方都要修改吧?
      

  6.   

    cmd.CommandType = CommandType.Text;
    执行查询后返回的什么数据类型?,ExecuteScalar()执行结果是不是字符串?
      

  7.   

    lz的需求是需要取出第一行第一列资料 还是 取出语句影响的行数?
    感觉楼主用混了.取第一行第一列资料:ExecuteScalar()
    取影响行数:ExecuteNonQuery()
      

  8.   

    我在更新操作中 只是想取得影响行数  来确定是否更新成功 什么时候需要用@@rowcount呢
      

  9.   

    ExecuteNonQuery()
    会告诉你影响了多少笔,至于更新成功的定义,就需要你自己下定义并自行去检查了.
    因为数据库只会告诉你影响了多少笔,是否影响了正确的笔数,写入了正确的栏位,这个需要自己检查的.
      

  10.   

    还是用断点看看每次ExecuteSaclar后得到的值,
    另外有可能是传入参数时的问题,四个参数都为int型,而在C#代码中传入的值,是否能正常转为int型还是值得用断点查看一下.
      

  11.   


    这个@@rowCount  起什么作用 
      

  12.   

    看样子,楼主是想获得这个存储过程中@@rowcount的值,但ExecuteScalar返回第一行和第一列,而且你的表Tb_News 的第一列是nvarchar型的,所以报错。你可以设置一个int型的Output类型得SqlParameter来接收存储过程中select语句返回的值,就可以解决这个问题了
      

  13.   

    设置一个输出参数就行了@RowCount int output@RowCount=select @@rowcount
      

  14.   

    取影响行数:ExecuteNonQuery()
    结贴 接分了