ADO调用存储过程

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("登录失败!");
                    }
 
                    //对于这里的验证登录的存储过程,由于该存储过程执行完毕以后不返回任何的数据,是否登录成功是根据输出参数来决定的,所以这里调用存储过程的哪个方法都可以执行。
 
                }
            }
        }
    }
}
原文地址:https://www.cnblogs.com/jiayue360/p/3167996.html