有如下两个方法:RunExecute和 RunExecuteScalar如下
public static int RunExecute(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = CreateCommand(procName, prams, Conn);
int intResult = Cmd.ExecuteNonQuery();
Conn.Close();
return intResult;
}
public static int RunExecuteScalar(string procName)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = DataBase.CreateCommand(procName, Conn);
int intResult = Convert.ToInt32(Cmd.ExecuteScalar());
Conn.Close();
return intResult;
}
这是要执行的存储过程procName
ALTER PROCEDURE dbo.ValidateUser (
@UserName varchar(50),
@UserPwd varchar(100)
)
AS
select count(*) from Users where UserName=@UserName and UserPwd=@UserPwd
RETURN当我执行上面的存储过程时,第一个返回的intResult为-1,第二个返回的是1,即查询的结果正确的,请大侠指点一下,以上两个方法ExecuteNonQuery()和ExecuteScalar()的区别是什么,
public static int RunExecute(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = CreateCommand(procName, prams, Conn);
int intResult = Cmd.ExecuteNonQuery();
Conn.Close();
return intResult;
}
public static int RunExecuteScalar(string procName)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = DataBase.CreateCommand(procName, Conn);
int intResult = Convert.ToInt32(Cmd.ExecuteScalar());
Conn.Close();
return intResult;
}
这是要执行的存储过程procName
ALTER PROCEDURE dbo.ValidateUser (
@UserName varchar(50),
@UserPwd varchar(100)
)
AS
select count(*) from Users where UserName=@UserName and UserPwd=@UserPwd
RETURN当我执行上面的存储过程时,第一个返回的intResult为-1,第二个返回的是1,即查询的结果正确的,请大侠指点一下,以上两个方法ExecuteNonQuery()和ExecuteScalar()的区别是什么,
一个返回执行影响的行数一个返回第一行第一列的数据http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar.aspx
ExecuteScalar返回的是第一行第一列的值
第一列第一行不为空,那么ExecuteScalar就直接对应的值。
有第一行,但是第一列为空,那么返回的是 DBNull 。
一行都没有,那么ExecuteScalar就返回null
ExecuteNonQuery():执行SQL,返回一个整型变量,如果SQL是对数据库的记录进行操作,那么返回操作影响的记录条数
ExecuteScalar返回的是第一行第一列的值
我还是一点困惑:
如果ExecuteNonQuery()执行的一条SQL语句为select count(*) from students,(假设students有两条记录)那么它返回的是什么?
用于select 的时候 好像返回值是-1.
错了吧,应该是返回-1 ,根本就没有影响任何行,只有执行了 Add ,Update ,Delete ,数据库里的数据才会发生变化才,会返回 大于0的数,Select 不影响任何行
一个返回执行影响的行数一个返回第一行第一列的数据http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar.aspx
看了一下msdn上面的解说,它没有明确的说明不可以是select语句,现在我应该明白了,这个方法应该只适合add,update,delete语句
ExecuteScalar 返回第一列的值
ExecuteScalar 返回第一列的值 ,比如查询操作
ExecuteScalar返回的是单行单列的值,只能返回单行单列