问题描述
本人再修改别人的一个半自动ORM框架的时候遇到一个问题:当框架调用存储过程(含有out参数)的时候,返不回改存储过程out参数的值。请高手帮忙看一下。非常感谢。我自定义的parameter类:publicclassDBParameter{privatestring_parameterName;privateobject_Value;privateDbType_dbType;privateParameterDirection_direction;publicstringParameterName{get{return_parameterName;}set{_parameterName=value;}}publicDbTypeDbType{get{return_dbType;}set{_dbType=value;}}publicobjectValue{get{return_Value;}set{_Value=value;}}publicParameterDirectionDirection{get{return_direction;}set{_direction=value;}}publicDBParameter(stringparameterName,objectparameterValue,DbTypedbType){InitData(parameterName,parameterValue,dbType,ParameterDirection.Input);}publicDBParameter(stringparameterName,objectparameterValue,DbTypedbType,ParameterDirectiondirection){InitData(parameterName,parameterValue,dbType,direction);}privatevoidInitData(stringparameterName,objectparameterValue,DbTypedbType,ParameterDirectiondirection){_parameterName=parameterName;_Value=parameterValue??DBNull.Value;_direction=direction;_dbType=dbType;}}我自定义的DBParameterCollection类publicclassDBParameterCollection:List<DBParameter>{publicvoidAddWithValue(stringparameterName,objectparameterValue,DbTypedbType){AddWithValue(parameterName,parameterValue,dbType,ParameterDirection.Input);}publicvoidAddWithValue(stringparameterName,objectparameterValue,DbTypedbType,ParameterDirectiondirection){DBParameterparameter=newDBParameter(parameterName,parameterValue,dbType,direction);base.Add(parameter);}}执行的时候是这样的:foreach(DBParameterparameterinparameters){//SqlParametersp=newSqlParameter();//sp.ParameterName=parameter.ParameterName;//sp.DbType=parameter.DbType;//sp.Value=parameter.Value;//sp.Direction=parameter.Direction;((SqlCommand)command).Parameters.AddWithValue(parameter.ParameterName,parameter.Value);((SqlCommand)command).Parameters[parameter.ParameterName].Direction=parameter.Direction;}请高手帮忙解决。急!分嫌不够可以另外开贴加分!
解决方案
解决方案二:
如果您对上面的代码还不是太明白,可以参考google的svn里的代码:我的跟这个有点像:http://www.google.cn/codesearch?hl=zh-CN&q=show:qF96HuuLo8Y:M3YclQFpqq0:qF96HuuLo8Y&sa=N&ct=rd&cs_p=http://sessionexplorer.googlecode.com/svn&cs_f=SessionExplorer.DataAccess/Parameter.cs&start=1再线等!~~~~~~~~~~~~~~~~~~~~~
解决方案三:
帮你顶
解决方案四:
你执行存储过程没?cmd.ExecuteNonQuery();
解决方案五:
你先试试存储过程能out值吗??
解决方案六:
存储过程都没问题,我是过了。用的普通的操作数据库的类试过了都没问题的
解决方案七:
ExecuteXXX代码呢?如果是ExecuteReader,你必须Close该Reader之后才能读取到output参数的值
解决方案八:
没见到什么ExecuteXXX代码没执行肯定获取不了
解决方案九:
最好跟踪下单步执行实时跟踪变量看下你声明的参数有没有设置为output存储过程是否正确执行如果没问题继续跟踪执行的存储过程用SqlServer的跟踪工具看是否正确初始化了参数及属性是否得到了结果这样细致的跟踪再加上你的细心应该会发现问题的
解决方案十:
确实没有执行代码。