为什么 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();
}


}
}
...全文
427 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;
}

内容概要:本文系统研究了电力系统短期负荷预测问题,提出并实现了基于极限学习机(ELM)及其智能优化改进模型的预测方法。研究涵盖标准ELM、白鲸优化算法(BWO)优化ELM和鹭鹰优化算法(IBOA)优化ELM三种模型,重点通过智能优化算法对ELM的输入权重与偏置参数进行全局寻优,有效克服了传统ELM因参数随机初始化导致的不稳定性和泛化能力不足的问题。文章完整呈现了从数据预处理、特征选择、模型构建、参数优化到预测结果对比分析的全流程,利用Matlab编程实现各模型的仿真验证,显著提升了预测精度与模型鲁棒性,为电力系统调度决策提供了可靠的技术支撑。; 适合人群:具备电力系统基础知识、时间序列预测理论及Matlab编程能力的高校研究生、科研机构研究人员以及电力公司从事负荷预测、电网调度与规划工作的技术人员。; 使用场景及目标:①应用于实际电力系统短期负荷预测业务中,提升电网运行调度的精细化与智能化水平;②作为智能优化算法与神经网络融合的经典案例,服务于学术论文撰、科研项目申报及算法性能对比研究;③应对新能源大规模接入背景下负荷波动加剧的挑战,为构建高精度、强鲁棒性的现代负荷预测体系提供解决方案。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解ELM网络结构与优化算法的集成机制,重点对比分析不同优化策略在收敛速度、预测误差(如MAE、RMSE、MAPE)等方面的性能差异,进而掌握智能优化技术在提升预测模型性能方面的关键作用。

62,269

社区成员

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

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

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

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