您的位置:首页 > 数据库

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

2007-04-18 16:47 309 查看
之前做项目在用存储过程,都是按照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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息