在sql server2000/2005中创建LSystem数据库,包含t_users表(user_no,user_name,user_pwd),这都是上次的图书管理系统的数据库。。。仅当做实验而已
创建存储过程lend_limit(写得比较简单,只是演示, 呵呵)
//参数mount可以去掉
create procedure lend_limit @id char(20)
as declare
@mount int;
begin
select *from t_users where user_id=@id
END
//DataBase类,用于数据库连接
如下:
using System;
using System.Data.SqlClient;
using System.Data;
namespace 使用存储过程访问数据库
{
///
/// Description of DataBase.
///
public class DataBase
{
private SqlConnection connect;
//private SqlDataReader sdr;
public DataBase()
{
string conString=@"Server=.;database=LSystem;user id=sa;password=110;";
this.connect=new SqlConnection(conString);
this.connect.Open();
}
//存储过程返回reader
//传入procStr存储过程名和sp(参数,即存储过程定义的参数),当然,该函数只适合一个参数的存储过程,可以重载该函数
public SqlDataReader getPReader(string procStr,SqlParameter sp)
{
SqlCommand sc=new SqlCommand(procStr,this.connect);
sc.CommandType=CommandType.StoredProcedure;
sc.Parameters.Add(sp);
SqlDataReader sqlDR=sc.ExecuteReader();
return sqlDR;
}
public void closeConnection()
{
connect.Close();
}
}
}
主类:
using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace 使用存储过程访问数据库
{
class Program
{
public static void Main(string[] args)
{
DataBase db=new DataBase();
SqlDataReader reader;
//参数的构造,@id为存储过程的参数名,SqlDbType.NChar为类型,与存储过程中定义的一致,20为大小
SqlParameter sqlPara=new SqlParameter("@id",SqlDbType.NChar,20);
// 参数赋值,在应用程序中传入
sqlPara.Value="1001";
//调用DataBase中的函数,返回reader
reader=db.getPReader("lend_limit",sqlPara);
//这样就可以对返回结果操作了
while(reader.Read())
{
Console.WriteLine("hello");
Console.WriteLine("{0}/t{1}/t{2}",reader[0].ToString().PadRight(30),reader[1].ToString().PadRight(20),reader[2].ToString());
}
//关闭
db.closeConnection();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
结果为