using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
namespace _01ado.net调用存储过程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string uid = txtUid.Text.Trim();
string pwd = txtPwd.Text;
//usp_login
string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
//本来应该写sql语句,现在变成了存储过程的名称
string sp_name = "usp_login";
using (SqlCommand cmd = new SqlCommand(sp_name, con))
{
//由于存储过程有参数,所以这里也得为command对象增加参数
//如果要调用存储过程没有参数,则这里不需要为command对象增加参数
SqlParameter[] pms = new SqlParameter[] {
new SqlParameter("@uid",uid),
new SqlParameter("@pwd",pwd),
new SqlParameter("@result",SqlDbType.Bit)
};
//设置第三个参数是一个output参数
pms[2].Direction = ParameterDirection.Output;
//把参数加进来
cmd.Parameters.AddRange(pms);
//执行存储过程与Sql语句的最大的区别需要设置一个CommandType
cmd.CommandType = CommandType.StoredProcedure;
//执行
con.Open();
#region ExecuteNonQuery
//int r = cmd.ExecuteNonQuery();
//MessageBox.Show("执行完毕的返回值:" + r.ToString());
#endregion
#region ExecuteScalar
////由于该存储过程执行完毕以后没有查询出任何的值,所以该方法返回值为null
//object obj = cmd.ExecuteScalar();
////MessageBox.Show(obj.ToString());
#endregion
#region ExecuteReader
//using (SqlDataReader reader = cmd.ExecuteReader())
//{
//}
//调用执行返回Reader的方法,因为这里不需要得到返回值,所以也不接受返回的DataReader
cmd.ExecuteReader();
#endregion
//这里要判断用户登录是否成功,关心的是执行完存储过程以后
//的输出参数
//获取输出参数,必须等到sql语句执行完毕
bool b = Convert.ToBoolean(pms[2].Value);
if (b)
{
MessageBox.Show("登录成功!~");
}
else
{
MessageBox.Show("登录失败!");
}
//对于这里的验证登录的存储过程,由于该存储过程执行完毕以后不返回任何的数据,是否登录成功是根据输出参数来决定的,所以这里调用存储过程的哪个方法都可以执行。
}
}
}
}
}