以下是部分代码:
private SqlCommand CreateProcCommand(string procName, SqlParameter[] prams)
{
Open();
SqlCommand cmd = new SqlCommand(procName,myConnection);
cmd.CommandType = CommandType.StoredProcedure;
if(prams !=null)
{
foreach(SqlParameter parameter in prams)
{
cmd.Parameters.Add(parameter); }
}
cmd.Parameters.Add( //这个是起什么作用的呢?
new SqlParameter(RETURNVALUE,
SqlDbType.Int,4,ParameterDirection.ReturnValue,
false,0,0,string.Empty,DataRowVersion.Default,null)); return cmd;
}
public int RunProc(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateProcCommand(procName, prams);
try
{
///执行存储过程
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
///记录错误日志
SystemError.SystemLog(ex.Message);
}
finally
{
///关闭数据库的连接
Close();
}
int nResult = (int)cmd.Parameters[RETURNVALUE].Value;
///返回存储过程的参数值
return (int)cmd.Parameters[RETURNVALUE].Value;//当运行时,往数据库中添加记录,这段就出现错误“未将对象引用设置到对象的实例”。是什么原因呢?
}这是个通用的数据库操作类。那个[RETURNVALUE]参数是否跟任何操作都没关系呢?还是我领会错误,可能在存储过程中有这个参数。(实例中的存储过程我打不开,所以猜的)。
谢谢各位参与,祝大家新年快乐!
private SqlCommand CreateProcCommand(string procName, SqlParameter[] prams)
{
Open();
SqlCommand cmd = new SqlCommand(procName,myConnection);
cmd.CommandType = CommandType.StoredProcedure;
if(prams !=null)
{
foreach(SqlParameter parameter in prams)
{
cmd.Parameters.Add(parameter); }
}
cmd.Parameters.Add( //这个是起什么作用的呢?
new SqlParameter(RETURNVALUE,
SqlDbType.Int,4,ParameterDirection.ReturnValue,
false,0,0,string.Empty,DataRowVersion.Default,null)); return cmd;
}
public int RunProc(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateProcCommand(procName, prams);
try
{
///执行存储过程
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
///记录错误日志
SystemError.SystemLog(ex.Message);
}
finally
{
///关闭数据库的连接
Close();
}
int nResult = (int)cmd.Parameters[RETURNVALUE].Value;
///返回存储过程的参数值
return (int)cmd.Parameters[RETURNVALUE].Value;//当运行时,往数据库中添加记录,这段就出现错误“未将对象引用设置到对象的实例”。是什么原因呢?
}这是个通用的数据库操作类。那个[RETURNVALUE]参数是否跟任何操作都没关系呢?还是我领会错误,可能在存储过程中有这个参数。(实例中的存储过程我打不开,所以猜的)。
谢谢各位参与,祝大家新年快乐!
解决方案 »
- 使用ModalPopup怎么在后台拿不到控件
- 关于edm的关系映射问题,求教
- 邮件发送时...里面的超链接内容丢了。。急急急....
- response.redirect的问题
- 请问一下,xml+xsl的文件,如本论坛的贴子页,可不可以被搜索引擎如google,百度搜索到的?
- 如何限制用户输入TextBox中的字符必须为中文??
- 求当验证窗体不满足条件时,要求弹出个一个对话框提示的代码.
- 关注:为什么VS.NET2000 不能在WINDOWS SERVER 2003上创建项目!
- 有一问题
- 确保 Web 地址 http://localhost: 正确
- 高分求解HttpRequest的问题
- vs2005 创建table 显示问题
private readonly string RETURNVALUE = "RETURNVALUE";
检查存储过程返回类型是否是int
试试
1.
有没有这个:
private readonly string RETURNVALUE = "RETURNVALUE";
2.
cmd.Parameters["ReturnValue"].Value
试试
1.
有没有这个:
private readonly string RETURNVALUE = "RETURNVALUE";
2.
cmd.Parameters["ReturnValue"].Value(以上的两个语句都有)catvv能否详细说下?
return (int)cmd.Parameters[RETURNVALUE].Value;这两句有点奇怪,既然在第一句就已经取得了输出参数的值,为什么还要用第二句呢?
就像
string[] arr=s.split(',');
之后明明可以写成
string x=arr[0];
非要再写一句
string x=s.split(',');
一样.楼主的问题,直接把存储过程一贴就知道哪有问题了.
手误
return (int)cmd.Parameters[RETURNVALUE].Value; 这两句有点奇怪,既然在第一句就已经取得了输出参数的值,为什么还要用第二句呢?
(这是我写错了 int nResult = (int)cmd.Parameters[RETURNVALUE].Value; 我以前改的忘删除了。)
我这个类是拷贝过来的,网上说是通用数据库类。存储过程看不到,所以我猜测RETURNVALUE参数,可能在存储过程中有声明。
首先建立一个具有返回值的存储过程,作为示例,我就简单的建一个存储过程,如下:
create proc test
(
@id int
)
asdeclare @flag intselect * from person where id=@idif @@rowcount > 0
set @flag=1
else
set @flag=0return @flag
我们要在程序中获得这个返回值的方法如下: [TestMethod]
public void TestReturnValue()
{
Database db = DatabaseFactory.CreateDatabase(); DbCommand dbcomm = db.GetStoredProcCommand("test"); db.AddInParameter(dbcomm, "@id", DbType.Int32,1);
//关键在这里,添加一个参数,类型为ReturnValue
db.AddParameter(dbcomm, "@RETURN_VALUE", DbType.String, ParameterDirection.ReturnValue, "", DataRowVersion.Current, null);
db.ExecuteNonQuery(dbcomm); int testvalue = (int)dbcomm.Parameters["@RETURN_VALUE"].Value; Assert.AreEqual(testvalue, 1);
}希望大家发表些看法。