请教关于存储过程调用类的问题

preaser 2003-09-19 11:10:18
最近看了一篇“存储过程通用调用类(C#)可以存储任何数据,不可错过!!”,感觉不错,在学习过程中发现当执行INSERT,DELETE类的存储过程,操作都会成功但result.value的返回值本该是具体的影响行数,比如1之类的,可是得到的结果都是0,不知为什么? 有哪为看过的,请教下。

文章地址:http://expert.csdn.net/Expert/TopicView1.asp?id=1807751
...全文
25 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdiyer 2003-09-19
  • 打赏
  • 举报
回复
如果你在存储过程中使用 set nocount on 语句,结果就不会显示受影响的行数。
webdiyer 2003-09-19
  • 打赏
  • 举报
回复
如果你在存储过程中使用 set nocount on 语句,结果就不会显示受影响的行数。
mmkk 2003-09-19
  • 打赏
  • 举报
回复
try use DAAB:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp
fogwater 2003-09-19
  • 打赏
  • 举报
回复
啊,代码好长啊!
gasover 2003-09-19
  • 打赏
  • 举报
回复
试试我的:
using System;
using System.Data;
using System.Data.SqlClient;

namespace DataLayer
{

/// <summary>
/// 数据层封装数据层的SQL基本连接,修改的ThePhile网上vcd店的。虽然它的基类比较多,
/// 也许有些我用不上,但是可以在上层的设计中多一个选择
/// </summary>
public abstract class DbObject
{
/// <summary>
/// SqlConnetion对象
/// </summary>
protected SqlConnection Connection;
private string connectionString;

/// <summary>
/// 类的构造函数
/// </summary>
/// <param name="newConnectionString">Connection String to the associated database</param>
public DbObject( string newConnectionString )
{
connectionString = newConnectionString;
Connection = new SqlConnection( connectionString );
}

/// <summary>
/// 获取连接字符串。
/// </summary>
protected string ConnectionString
{
get
{
return connectionString;
}
}

/// <summary>
/// 生成带int返回参数的Command对象
/// </summary>
/// <param name="storedProcName">Name of the stored procedure in the DB, eg. sp_DoTask</param>
/// <param name="parameters">Array of IDataParameter objects containing parameters to the stored proc</param>
/// <returns>Newly instantiated SqlCommand instance</returns>
private SqlCommand BuildIntCommand(string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = BuildQueryCommand( storedProcName, parameters );

command.Parameters.Add( new SqlParameter( "ReturnValue",
SqlDbType.Int,
4, /* Size */
ParameterDirection.ReturnValue,
false, /* is nullable */
0, /* byte precision */
0, /* byte scale */
string.Empty,
DataRowVersion.Default,
null ));

return command;
}


/// <summary>
/// 生成不带返回参数的Command 对象。
/// </summary>
/// <param name="storedProcName">Name of the stored procedure</param>
/// <param name="parameters">Array of IDataParameter objects</param>
/// <returns></returns>
private SqlCommand BuildQueryCommand(string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand( storedProcName, Connection );
command.CommandType = CommandType.StoredProcedure;

foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add( parameter );
}

return command;

}

/// <summary>
/// 执行一条存储过程,返回存储过程的值,和受到影响的行数。
/// </summary>
/// <param name="storedProcName">Name of the stored procedure</param>
/// <param name="parameters">Array of IDataParameter objects</param>
/// <param name="rowsAffected">Number of rows affected by the stored procedure.</param>
/// <returns>An integer indicating return value of the stored procedure</returns>
protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
int result;

Connection.Open();
SqlCommand command = BuildIntCommand( storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
Connection.Close();
return result;
}

/// <summary>
/// 执行一条存储过程,返回SqlDataReader对象,在SqlDataReader对象关闭的同时,数据库连接自动关闭。
/// </summary>
/// <param name="storedProcName">Name of the stored procedure</param>
/// <param name="parameters">Array of parameters to be passed to the procedure</param>
/// <returns>A newly instantiated SqlDataReader object</returns>
protected SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
{
SqlDataReader returnReader;

Connection.Open();
SqlCommand command = BuildQueryCommand( storedProcName, parameters );

returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
//Connection.Close();
return returnReader;
}

/// <summary>
/// 执行一条存储过程,返回DataSet对象
/// </summary>
/// <param name="storedProcName"></param>
/// <param name="parameters"></param>
/// <param name="tableName"></param>
/// <returns></returns>
protected DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
{
DataSet dataSet = new DataSet();
Connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters );
sqlDA.Fill( dataSet, tableName );
Connection.Close();

return dataSet;
}

/// <summary>
/// 将一个已有的DataSet对象用存储过程重新填充值。
/// </summary>
/// <param name="storedProcName"></param>
/// <param name="parameters"></param>
/// <param name="dataSet"></param>
/// <param name="tableName"></param>
/// <returns></returns>
protected void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName )
{
Connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters );
sqlDA.Fill( dataSet, tableName );
Connection.Close();
}
}
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧