2010-03-20 22:32:54| 分类: winform C# | 标签: |字号大中小 订阅
在c#应用程序中调用存储过程—执行添加数据
步骤:
首先,在SQL Server中创建存储过程;
示例代码:
--创建添加数据的存储过程
if exists (select * from sysobjects where name = 'proc_AddUser')
drop proc proc_AddUser
go
create procedure proc_AddUser
@uId int output,
@uName nvarchar(20),
@uAge int,
@uPass nvarchar(200)
with encryption --对存储过程进行加密
as
insert into UserInfo (uName,uAge,password) values (@uName,@uAge,@uPass)
select @uId = @@identity
go
其次,在c#项目中搭建三层架构,并且在数据访问层创建DBService类(数据库操作通用类,可以连接数据库,对
数据库数据进行增删改查的操作)
DBService.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Da
using System.Da
using System.Configuration; //配置文件
namespace Ch3DemoDAL
{
public class DBService
{
#region 私有构造
/// <summary>
/// 私有构造函数
/// </summary>
private DBService()
{
}
#endregion
#region 私有成员
/// <summary>
/// 静态私有的数据库连接字符串
/// </summary>
private static readonly string strConn =
ConfigurationManager.ConnectionStrings
["Ch3Demo.Properties.Settings.Setting"].ToString(); //这里需要配置文件App.config才可用
/// <summary>
/// 静态私有的数据库连接对象,封装字段
/// </summary>
private static SqlConnection conn = null;
public static SqlConnection Conn
{
get
{
if (conn == null)
{
conn = new SqlConnection(strConn);
conn.Open();
}
else if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
return DBService.conn;
}
}
#endregion
#region 公共方法,静态公共的数据库访问方法(必须是静态的)
/// <summary>
/// 执行数据库的增删改操作
/// </summary>
/// <param name="sql"></param>
/// <returns>受影响行数</returns>
public static int ExecuteCommand(string sql)
{
using (SqlCommand command = new SqlCommand(sql, Conn))
{
return command.ExecuteNonQuery();
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="sql"></param>
/// <param name="values"></param>
/// <returns></returns>
public static int ExecuteCommand(string sql, params SqlParameter[] values)
{
using (SqlCommand command = new SqlCommand(sql, Conn))
{
command.Parameters.AddRange(values);
return command.EndExecuteNonQuery();
}
}
/// <summary>
/// 执行数据库的增删改查操作
/// </summary>
/// <param name="sql"></param>
/// <returns>首行首列</returns>
public static int ExecuteScalar(string sql)
{
using (SqlCommand command = new SqlCommand(sql, Conn))
{
return Convert.ToInt32(command.ExecuteScalar());
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="sql"></param>
/// <param name="values"></param>
/// <returns></returns>
public static int ExecuteScalar(string sql,params SqlParameter[] values)
{
using (SqlCommand command = new SqlCommand(sql, Conn))
{
command.Parameters.AddRange(values);
return Convert.ToInt32(command.ExecuteScalar());
}
}
/// <summary>
/// 获得DataReader
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader GetRerader(string sql)
{
SqlCommand command = new SqlCommand(sql, Conn);
SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
return dataReader;
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="sql"></param>
/// <param name="values"></param>
/// <returns></returns>
public static SqlDataReader GetRerader(string sql, params SqlParameter[] values)
{
SqlCommand command = new SqlCommand(sql,Conn);
command.Parameters.AddRange(values);
SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
return dataReader;
}
/// <summary>
/// 获得结果集
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataSet GetResult(string sql)
{
DataSet dataSet = new DataSet();
using (SqlDataAdapter da = new SqlDataAdapter(sql, Conn))
{
da.Fill(dataSet);
}
return dataSet;
}
#endregion
}
}
之后,再在数据访问层创建一个AddUserService类,用于添加用户;该类就运用存储过程对程序进行增加用户的
操作;
示例代码:
AddUserService.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Da
using System.Da
namespace Ch3DemoDAL
{
public class AddUserService
{
public static int AddUser(Entity.UserInfo user)
{
int id = 0;
//使用存储过程实现添加数据
//proc_AddUser为存储过程名称
using (SqlCommand command = new SqlCommand("proc_AddUser", DBService.Conn))
{
//指定command对象的执行方式
command.CommandType = CommandType.StoredProcedure;
//指定存储过程的参数并赋值
command.Parameters.Add("@uName",SqlDbType.NVarChar,20).Value = user.Name;
command.Parameters.Add("@uAge", SqlDbType.Int).Value = user.Age;
command.Parameters.Add("@uPass", SqlDbType.NVarChar, 200).Value = user.Password;
//设置输出参数
command.Parameters.Add("@uId", SqlDbType.Int).Direction
=ParameterDirection.Output; //@uId,@uName等参数必须与数据库存储过程中的参数一致
//执行
command.ExecuteNonQuery();
//获取输出参数的值
id = Convert.ToInt32(command.Parameters["@uId"].Value);
}
return id;
}
}
}
至此,就可用存储过程向数据库添加数据了。
转发至微博
转发至微博
评论