半自动ORM框架遇到一个问题,高手请进!100分!~
本人再修改别人的一个半自动ORM框架的时候遇到一个问题:当框架调用存储过程(含有out参数)的时候,返不回改存储过程out参数的值。请高手帮忙看一下。
非常感谢。
我自定义的parameter类:
public class DBParameter
{
private string _parameterName;
private object _Value;
private DbType _dbType;
private ParameterDirection _direction;
public string ParameterName
{
get
{
return _parameterName;
}
set
{
_parameterName = value;
}
}
public DbType DbType
{
get
{
return _dbType;
}
set
{
_dbType = value;
}
}
public object Value
{
get
{
return _Value;
}
set
{
_Value = value;
}
}
public ParameterDirection Direction
{
get
{
return _direction;
}
set
{
_direction = value;
}
}
public DBParameter(string parameterName,object parameterValue,DbType dbType)
{
InitData(parameterName, parameterValue,dbType, ParameterDirection.Input);
}
public DBParameter(string parameterName, object parameterValue, DbType dbType, ParameterDirection direction)
{
InitData(parameterName, parameterValue,dbType, direction);
}
private void InitData(string parameterName,object parameterValue,DbType dbType, ParameterDirection direction)
{
_parameterName = parameterName;
_Value = parameterValue ?? DBNull.Value;
_direction = direction;
_dbType = dbType;
}
}
我自定义的DBParameterCollection 类
public class DBParameterCollection : List<DBParameter>
{
public void AddWithValue(string parameterName, object parameterValue,DbType dbType)
{
AddWithValue(parameterName, parameterValue,dbType, ParameterDirection.Input);
}
public void AddWithValue(string parameterName, object parameterValue, DbType dbType ,ParameterDirection direction)
{
DBParameter parameter = new DBParameter(parameterName, parameterValue,dbType, direction);
base.Add(parameter);
}
}
执行的时候是这样的:
foreach (DBParameter parameter in parameters)
{
//SqlParameter sp = new SqlParameter();
//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的跟踪工具 看是否正确初始化了参数及属性 是否得到了结果 这样细致的跟踪再加上你的细心 应该会发现问题的 --------------------编程问答-------------------- 确实没有执行代码。
补充:.NET技术 , ASP.NET