之前做项目在用存储过程,都是按照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