C#简单轻松调用存储过程(SqlServer2000)

之前做项目在用存储过程,都是按照MSDN给的例子,结果把存储过程的调用搞得极度复杂,C#代码写了一大堆,什么Input/Output的参数贯穿存储过程。

闲下来上网查了查,发现绝大部分的教程都是这样子的,想必自己写的代码也没有错。后来和别人聊起,才发现其实还有比较简单的方法,于是自己研究了一下,确实是几行代码就能搞掂,把它贴出来给大家参考参考,高手别见笑,^_^。

1、首先建立表abc
CREATE TABLE [dbo].[abc] (
 [a1] [int] IDENTITY (1, 1) NOT NULL ,
 [a2] [varchar] (50) NOT NULL ,
 [a3] [int] NOT NULL ,
 [a4] [varchar] (50) NOT NULL
) ON [PRIMARY]
GO 

数据

2、这里介绍两种情况的存储过程,第一种是查询表的,第二种是返回几个值的。

2.1>查询表的存储过程
CREATE PROCEDURE selectABC
(
@id int,
@a2 varchar(50)
)
AS
select * from abc where a1=@id and a2 like '%'+@a2+'%'
GO

2.2>返回几个值的
CREATE PROCEDURE outputABC
(
@id int,
@a2 varchar(50)
)
AS
declare @t varchar(50)

create table #tmp //建立临时表,用于记录返回的值
(
a1 int primary key,
a2 varchar(50)
)

select @t=a4 from abc where a1=@id and a2 like '%'+@a2+'%' 

//有多条记录可以直接在select插入,如使用select * into #tmp from abc的方式
insert into #tmp(a1, a2) values(20, @t)

select * from #tmp
GO

3、C#调用存储过程代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ProcedureDemo
{
    class DBManager
    {
        private SqlConnection sqlCon = null;

        public DBManager()
        {
        }

        public void ConDB()
        {
            try
            {
                sqlCon = new SqlConnection("Data Source=(local);Initial Catalog=demo;user id=sa;password=123");
                sqlCon.Open();
            }
            catch (Exception e2)
            {
                Console.WriteLine(e2);
            }
        }

        public DataSet ExecuteProc(string procName, SqlParameter[] sqlParams)
        {
            try
            {
                DataSet ds = new DataSet(procName);
                SqlCommand cmd = new SqlCommand(procName, this.sqlCon);
                cmd.CommandType = CommandType.StoredProcedure;
                for (int i = 0; i < sqlParams.Length; i++)
                {
                    cmd.Parameters.Add(sqlParams[i]);
                }
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds.Tables[0].Rows.Count > 0) //偷懒一下,直接在这里输出了^_^
                {
                    Console.WriteLine(ds.Tables[0].Rows[0][0].ToString());
                    Console.WriteLine(ds.Tables[0].Rows[0][1].ToString());
                }
                return ds;
            }
            catch (Exception e2)
            {
                Console.WriteLine(e2);
            }
            return null;
        }
    }
}

使用代码
DBManager dbManager = new DBManager();
dbManager.ConDB();
SqlParameter[] sqlParams1 = new SqlParameter[2];
sqlParams1[0] = new SqlParameter("id", "1");
sqlParams1[1] = new SqlParameter("a2", "3");
dbManager.ExecuteProc("selectABC", sqlParams1);

SqlParameter[] sqlParams2 = new SqlParameter[2];
sqlParams2[0] = new SqlParameter("id", "2");
sqlParams2[1] = new SqlParameter("a2", "g");
dbManager.ExecuteProc("outputABC", sqlParams2);

结果输出:
1
234

20
4f34rt43

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值