| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2314 人关注过本帖
标题:求助!如何编写带存储过程的数据库访问类
只看楼主 加入收藏
ilovetea
Rank: 1
来 自:辽宁省锦州市
等 级:新手上路
帖 子:177
专家分:4
注 册:2008-3-31
收藏
得分:0 
好的,你这么说我都不好意思了,明天等哦

我是爱喝茶的胖子,有空一起喝茶啊
我的百度博客:http://hi.baidu.com/33806380
2008-11-02 21:31
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
呵呵,我明天写好了,去网吧发~家里网速太恶心了。


仁者乐膳,智者乐睡。我都爱~
2008-11-02 21:34
ilovetea
Rank: 1
来 自:辽宁省锦州市
等 级:新手上路
帖 子:177
专家分:4
注 册:2008-3-31
收藏
得分:0 
自己顶下,不要沉下去啊

我是爱喝茶的胖子,有空一起喝茶啊
我的百度博客:http://hi.baidu.com/33806380
2008-11-03 16:20
菜鸟来也
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-3
收藏
得分:0 
正在等待
2008-11-03 16:47
ilovetea
Rank: 1
来 自:辽宁省锦州市
等 级:新手上路
帖 子:177
专家分:4
注 册:2008-3-31
收藏
得分:0 
等的好苦,顶下,别沉下去

我是爱喝茶的胖子,有空一起喝茶啊
我的百度博客:http://hi.baidu.com/33806380
2008-11-04 08:49
ilovetea
Rank: 1
来 自:辽宁省锦州市
等 级:新手上路
帖 子:177
专家分:4
注 册:2008-3-31
收藏
得分:0 
小仙在吗?看来还得等啊,尽快啊

我是爱喝茶的胖子,有空一起喝茶啊
我的百度博客:http://hi.baidu.com/33806380
2008-11-04 21:13
pc9527
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-1-24
收藏
得分:0 
转发个存储过程通用类,用来访问SQL的存储过程
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Collections;
using System.Data;
// 摘要:数据访问助手。
// 作者:ZhiQiao
// 日期:2008/07/02

namespace ZhiQiao.DataAccessHelper
{
// 存储过程调用助手。
    public class StoreProcedure
{
// 存储过程名称。
        private string _name;
// 数据库连接字符串。
        private string _conStr;
// 构造函数
// sprocName: 存储过程名称;
// conStr: 数据库连接字符串。
        public StoreProcedure(string sprocName, string conStr) {
_conStr = conStr;
_name = sprocName;
}
//  执行存储过程,不返回值。
//  paraValues: 参数值列表。
//  return: void
        public void ExecuteNoQuery(params object[] paraValues) {
using (SqlConnection con = new SqlConnection(_conStr)) {
SqlCommand comm = new SqlCommand(_name, con);
= CommandType.StoredProcedure;
AddInParaValues(comm, paraValues);
con.Open();
comm.ExecuteNonQuery();
con.Close();
}
}
// 执行存储过程返回一个表。
// paraValues: 参数值列表。
// return: DataTable
        public DataTable ExecuteDataTable(params object[] paraValues) {
SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr));
= CommandType.StoredProcedure;
AddInParaValues(comm, paraValues);
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
// 执行存储过程,返回SqlDataReader对象,
// 在SqlDataReader对象关闭的同时,数据库连接自动关闭。
// paraValues: 要传递给给存储过程的参数值类表。
// return: SqlDataReader
        public SqlDataReader ExecuteDataReader(params object[] paraValues) {
SqlConnection con = new SqlConnection(_conStr);
SqlCommand comm = new SqlCommand(_name, con);
= CommandType.StoredProcedure;
AddInParaValues(comm, paraValues);
con.Open();
return comm.ExecuteReader(CommandBehavior.CloseConnection);
}
// 获取存储过程的参数列表。
        private ArrayList GetParas() {
SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90",
new SqlConnection(_conStr));
= CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@procedure_name", (object)_name);
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataTable dt = new DataTable();
sda.Fill(dt);
ArrayList al = new ArrayList();
for (int i = 0; i < dt.Rows.Count; i++) {
al.Add(dt.Rows[i][3].ToString());
}
return al;
}
// 为 SqlCommand 添加参数及赋值。
        private void AddInParaValues(SqlCommand comm, params object[] paraValues) {
comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int));
comm.Parameters["@RETURN_VALUE"].Direction =
ParameterDirection.ReturnValue;
if (paraValues != null) {
ArrayList al = GetParas();
for (int i = 0; i < paraValues.Length; i++) {
comm.Parameters.AddWithValue(al[i + 1].ToString(),
paraValues[i]);
}
}
}
}
}
2008-11-05 09:22
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
哎,我都不好意思再解释什么了。这些时,真的是太忙了。楼主,我酝酿的时候发现不知道侧重点在哪,是该写三层架构还是ADO通用存储过程类还是讲最基础的怎么调用存储过程的出参,返回值。不好下笔啊,都写的话,要花很长时间,写DEMO案例的时候,数据交互类花了6个小时,后来发现想的是很好,运用到两个项目中去,又发现了些问题,数据交互类,就是在不断磨砺中才能变得成熟起来,根据不同的需要,永远没有最好的写法。界面层花了大概4个小时。我觉得控件的应用都有点喧宾夺主的味道了。验证花了很长时间。写完后,准备开工搞文章,提笔之际发现写文章比讲述,比做案例都麻烦,从我以前的文章来看,都是做案例很简单,讲起来也很简单,但是写起来要考虑的就很多,就譬如前面提到的文章的侧重点。还有举例是否重复,是否有说服力,通用性。
    可能楼主需要的只是简单的注释,但我想写一篇比较完美的东西,哎,想多了反而效率低了。偏巧这几天又很忙很忙。希望能够理解。我会尽快完成文章,为了兼顾你的工作,你也可以把具体问题拿出来,我们针对你一个人的问题予以解答,这样我写文章和你解决问题就两不误了。
    最后句话,那啥,慢工出细活来着。


仁者乐膳,智者乐睡。我都爱~
2008-11-05 20:23
ilovetea
Rank: 1
来 自:辽宁省锦州市
等 级:新手上路
帖 子:177
专家分:4
注 册:2008-3-31
收藏
得分:0 
别着急,这很正常,好东西需要更多的准备,希望早点看到大作

我是爱喝茶的胖子,有空一起喝茶啊
我的百度博客:http://hi.baidu.com/33806380
2008-11-08 14:41
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
呃。。这个礼拜六我好不容易休息了,想开始写,不过被人拉出去玩了,现在在网吧。。。哎,我都不好意思拉,一再失言,我决定先把你的要求就在网吧回复好了,你也可以另外提要求出来。
下面是代码:SQL脚本的
create proc GetMan
as
select *
from table
where 性别 = '男'

C#这边:
public void GetMan(ref DataTable dt)  //返回界面要绑定的数据表
{
    using(SqlConnection con = new SqlConnection(连接字符串))
    {
        try{con.Open();}             //Fill方法虽然能自动打开连接,但是为了便于纠错,在此打开先。
        catch(Execption ex){MessageBox.Show(ex.Message);}
        SqlCommand cmd = new SqlCommand("存储过程名就是那边厢的GetMan",con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);                 //使用适配器填充方法,填充数据源。还有个好处,Fill()方法可以自动关闭连接,很适合我这种懒人,
                                        //偷懒也是有技巧滴。。
        
    }
由于没参数,基本写起来还是蛮简单的。这段代码是量身为你的问题定做的,方便看一些。哪里有问题还可以再问,需求很简单,我就没写到分层。你也可以在外头再包装一遍。
}

编号 姓名 性别 班级
1    张三 男   


仁者乐膳,智者乐睡。我都爱~
2008-11-08 17:11
快速回复:求助!如何编写带存储过程的数据库访问类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059966 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved