为什么 protected SqlDataReader RunProcedure(..)这段还要写Command.CommandType=CommandType.StoredProcedure;

hiweiyi2000 2006-06-23 09:13:56
using System;
using System.Data;
using System.Data.SqlClient;


namespace Wrox.WebModules.Data
{
/// <summary>
/// DbObject 的摘要说明。
/// </summary>
public abstract class DbObject
{
protected SqlConnection Connection;
private string connectionString;

public DbObject(string newConnectionString)
{
connectionString=newConnectionString;
Connection=new SqlConnection(connectionString);

//
// TODO: 在此处添加构造函数逻辑
//
}
protected string ConnectionString
{
get
{
return connectionString;
}
}
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;
}
private SqlCommand BuildIntCommand(string storedProcName,IDataParameter[] parameters)
{
SqlCommand command=BuildQueryCommand(storedProcName,parameters);
command.Parameters.Add(new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));
return command;
}
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;
}
protected SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters)
{
SqlDataReader returnReader;
Connection.Open();
SqlCommand command=BuildQueryCommand(storedProcName,parameters);
command.CommandType=CommandType.StoredProcedure;
returnReader=command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;
}
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;
}
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();
}


}
}
...全文
409 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2006-06-24
  • 打赏
  • 举报
回复
应该不需要的,但上面的编码的质量很差,所以见怪不怪了
amandag 2006-06-24
  • 打赏
  • 举报
回复
up
hiweiyi2000 2006-06-24
  • 打赏
  • 举报
回复
private SqlCommand BuildIntCommand(string storedProcName,IDataParameter[] parameters)
{
SqlCommand command=BuildQueryCommand(storedProcName,parameters);
command.Parameters.Add(new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));

这里加的一个ReturnValue是什么?
return command;
}
protected int RunProcedure(string storedProcName,IDataParameter[] parameters,out int rowsAffected)
{
int result;
Connection.Open();
SqlCommand command=BuildIntCommand(storedProcName,parameters);
rowsAffected=command.ExecuteNonQuery();
rowsAffected这样直接得个int数吗?
result=(int)command.Parameters["ReturnValue"].Value;

直接result得个参数是什么?
Connection.Close();

return result;
}
  • 打赏
  • 举报
回复
默认情况下,Command.CommandType 的类型不是存储过程,所以这里要写上这句。
bingbingcha 2006-06-24
  • 打赏
  • 举报
回复
protected SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters)

如果你贴的代码是全的话,这个函数是有问题的.会造成内存泄漏..你重复调用两次看看..会出错..

如果非要返回一个SqlDataReader 的话,需要额外添加方法,释放SqlDataReader 占用的连接资源...

这个类的问题多多..建议参考Microsoft和Yahoo!的SQL类.
hiweiyi2000 2006-06-23
  • 打赏
  • 举报
回复
BuildQueryCommand这段不是有了吗?
如下:


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;
}

为什么要写多一次。在下面这段里,

protected SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters)
{
SqlDataReader returnReader;
Connection.Open();
SqlCommand command=BuildQueryCommand(storedProcName,parameters);
command.CommandType=CommandType.StoredProcedure;
returnReader=command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;
}


hiweiyi2000 2006-06-23
  • 打赏
  • 举报
回复
command.CommandType=CommandType.StoredProcedure;
说的是这一句
fxj_wl 2006-06-23
  • 打赏
  • 举报
回复
保证代码的完整性、规范性,就像if语句后最好有{},无论{}里有多少条语句
hiweiyi2000 2006-06-23
  • 打赏
  • 举报
回复
protected SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters)
{
SqlDataReader returnReader;
Connection.Open();
SqlCommand command=BuildQueryCommand(storedProcName,parameters);
command.CommandType=CommandType.StoredProcedure;
returnReader=command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;
}


直接执行不就行了,不明白这段为什么要写多一次。
hiweiyi2000 2006-06-23
  • 打赏
  • 举报
回复
为什么 protected SqlDataReader RunProcedure(..)这段还要写Command.CommandType=CommandType.StoredProcedure;

BuildQueryCommand这段不是有了吗?
如下:


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;
}

62,256

社区成员

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

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

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

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