随笔 - 63  文章 - 72  评论 - 951  阅读 - 140万 

      今天又有朋友问起关于c#调用存储过程的问题,发现自己好久没用,竟然也忘得差不多了。还好以前在其它博客里也有写过,结果。。。自然是解决了。

     本来想直接把以前那片拿过来的,但是感觉还是重新写一下让自己印象深刻点。

     调试环境:VS.NET 2005,SQL 2000,WINDOWS XP sp2。

     语言:C#

     调用带输参数的存储过程

     首先自然是在查询分析器里创建一个存储过程喽~~   如下所示:

create proc proc_1
@uid int,
@pwd varchar(255)
as
select UserName from users where uid = @uid and PassWord = @pwd
go
 

     接下来我们就来看下如何在VS 2005中使用C#调用这个存储过程。

     方法一:

复制代码
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();
//打开数据库连接
SqlCommand cmd = new SqlCommand("exec proc_1 @uid=1,@pwd=admin", conn);//Command中写调用存储过程的语句
//大家应该看出来了和直接在查询分析器中执行很类似,“exec 存储过程名 @参数1=参数值,@参数2=参数值”
SqlDataReader sdr = cmd.ExecuteReader();//执行存储过程
while (sdr.Read())
{
    Response.Write(sdr[
"UserName"].ToString());//输出查询到的值
}
sdr.Close();
conn.Close();
复制代码

     方法二:

复制代码
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();
//打开数据库连接
SqlCommand cmd = new SqlCommand("proc_1", conn);//存储过程名
cmd.CommandType = CommandType.StoredProcedure;//设置命令类型为存储过程
SqlParameter[] param = new SqlParameter[]{
   
new SqlParameter("uid", SqlDbType.Int, 4),
   
new SqlParameter("pwd", SqlDbType.VarChar,255), 
};
//定义参数,这些是存储过程中要调用的参数,也可以通过直接使用cmd.AddWithValue方法添加参数
param[0].Value = 1;//给参数赋值
param[1].Value = "admin";
cmd.Parameters.AddRange(param);
//一定要记得将刚定义的参数添加到cmd的参数中,不然前面的参数就白弄了。
string sname =(string)cmd.ExecuteScalar();//如果存储过程返回的是单个值,我们可以直接这样取出所要的值
Response.Write(sname);
sdr.Close();
conn.Close();
复制代码

 

     调用带输参数的存储过程

     上面所讲的只是调用输入参数的存储过程,下面大概讲一下如何调用有输出参数的存储过程。

     首先,我们先对之前的存储过程修改一下,如下所示:

复制代码
create proc proc_1
@uid int,
@pwd varchar(255),
@UserName varchar(255) output --这里我们增加一个输出变量,记得加上output
as
select @UserName=UserName from users where uid = @uid and PassWord = @pwd
go

--以下是在查询分析器中调用的方法
declare @n varchar(255--声明一个变量用来传递参数
exec proc_1 1,admin,@n output --注,要标记为output变量
print @n
复制代码

     下面我们看看在VS.NET 中的调用方式:

复制代码
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();
SqlCommand cmd 
= new SqlCommand("proc_1", conn);
cmd.CommandType 
= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(
"uid"1);
cmd.Parameters.AddWithValue(
"pwd""admin");
cmd.Parameters.Add(
"username", SqlDbType.VarChar, 255);
cmd.Parameters[
"username"].Direction = ParameterDirection.Output;//设置参数为输出参数
cmd.ExecuteNonQuery();
string sname = (string)cmd.Parameters["username"].Value;//获取输出参数的值
Response.Write(sname);
conn.Close();
复制代码

 

     这样,便很简单的实现了调用存储过程的方法。

 

posted on   stg609  阅读(2462)  评论(4编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
分享按钮
点击右上角即可分享
微信分享提示