为什么存储过程总返回-1 取存储过程的值 取数据集
一、为什么存储过程总返回-1
你是用ExecuteNonQuery进行“添加”操作的把?
ExecuteNonQuery 不返回任何行数据,但映射到参数的任何输出参数或返回值都会用数据进行填充。
对于查询更新删除操作UPDATE、INSERT 和DELETE 语句,返回值为该命令所影响的行数。
对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也为-1
如果执行了存储过程,返回值必定是-1 , 因此不能根据返回值来判断其是否执行成功。
以上引用(CSDN:benbirdar的发言)
二、取存储过程的值
过程:
ALTER PROCEDURE [dbo].[Up_B_EQCalculation]
@AmmId varchar(18)='',
@RtuCode varchar(12)='',
@Caltime datetime,
@Total decimal(18, 2),
@ReEQ decimal(18, 2)=0 OUTPUT
SqlParameter dSQLPara = new SqlParameter ( "@ReEQ" , SqlDbType.Decimal );
dSQLPara.Direction = ParameterDirection.Output;
cmd.Parameters.Add ( dSQLPara );
cmd.CommandText = "Up_B_EQCalculation";
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteReader( );
cmd.Connection.Close ( );
strReturn = dSQLPara.Value.ToString ( ); //返回值
三、取数据集
string cnstr="data source=.;initial catalog=company;persist security info=False;user id=sa;pwd=sa;";
private SqlCommand cm=new SqlCommand ( ); //建立Command对象
//运行存储过程返回DataSet
public DataSet runSPDataSet ( string StoredProcedureName )
{
cm.Connection = new SqlConnection ( cnstr );
cm.Connection.Open ( );
cm.CommandText = StoredProcedureName;
cm.CommandType = CommandType.StoredProcedure;
try
{
SqlDataAdapter da=new SqlDataAdapter ( cm );
DataSet DS=new DataSet ( );
da.Fill ( DS );
return DS;
}
catch ( Exception ex )
{
throw ex;
}
finally
{
cm.Connection.Close ( );
}
}
//通过传入的存储过程的名称来执行存储过程,把返回的第一个记录集里的第一条记录放在Object 数组里。
//多用在显示详细信息里,因为这种情况大多都是只用一条记录的。如果是空的话返回strValue[0]="null" 。
//运行存储过程返回第一条记录的数组
public Object [ ] runSPItems ( string StoredProcedureName )
{
Object[] strValue=new Object [ 1 ];
cm.CommandText = StoredProcedureName;
cm.CommandType = CommandType.StoredProcedure;
try
{
cm.Connection.Open ( );
SqlDataReader r = cm.ExecuteReader ( CommandBehavior.CloseConnection );
if ( r.Read ( ) )
{
strValue = new Object [ r.FieldCount ];
r.GetValues ( strValue );
}
else
补充:Web开发 , ASP.Net ,