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 时出错。这个是怎么回事?
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
应该是这句 无法转换,ExecuteScalar()执行结果是个字符串..
int i= (int)cmd.ExecuteScalar();
检查存储过程数据类型
我的model类里用的是string 数据库用的varchar如果@News_title nvarchar(200), 这样改的话 好多地方都要修改吧?
执行查询后返回的什么数据类型?,ExecuteScalar()执行结果是不是字符串?
感觉楼主用混了.取第一行第一列资料:ExecuteScalar()
取影响行数:ExecuteNonQuery()
会告诉你影响了多少笔,至于更新成功的定义,就需要你自己下定义并自行去检查了.
因为数据库只会告诉你影响了多少笔,是否影响了正确的笔数,写入了正确的栏位,这个需要自己检查的.
另外有可能是传入参数时的问题,四个参数都为int型,而在C#代码中传入的值,是否能正常转为int型还是值得用断点查看一下.
这个@@rowCount 起什么作用
结贴 接分了