VS调SQL中存储过程实现登陆

数据库部分

use master--使用master数据库
go

--if db_id('DL')is not null--判断数据库中是否好有名字叫DL的数据库要是有的话就删掉
if exists(select * from sysdatabases where name='Land')
drop database Land
go

create database Land--创建DL数据库
go

use Land--使用DL数据库
go

--if object_id('person')is not null--判断数据库中是否含有名字叫做person的表有就删掉
if exists(select * from sysobjects where name='person')
drop table person
go

create table person--创建表
(
pname varchar(50),--字段(列名 数据类型(长度))
ppwd varchar(50)
)
go

insert into person(pname,ppwd) values('哈哈','123')--插入数据
go

--判断登陆的存储过程
create proc Judge_a_landing
@name varchar(50),
@pwd varchar(50),
@message varchar(200) output
as
if(select count(*) from person where pname=@name)>0
begin
if(select count(*) from person where pname=@name and ppwd=@pwd)>0
set @message= '允许登录!'
else
set @message= '密码错误!'
end
else
set @message= '用户名不存在!'
--drop proc Judge_a_landing
--go

--declare @x varchar(200)
--execute Judge_a_landing '哈哈', '123', @x output
--print @x

SqlHelper类部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入命名空间
using System.Data.SqlClient;


namespace Login
{
//新建一个类文件,将这个类权限设置成public的
public class SqlHelper
{
/// <summary>
/// 设置连接字符串
/// </summary>
private static string sqlConn = "server=HP-PC;uid=sa;pwd=sa;database=Land";
//定义一个公共静态的变量,用来存放一段字符串,这段字符串是:VS和数据库建立联系的。

public SqlHelper() { }
//这个是系统默认的构造函数,一般情况下是不用写的,但是为了规范就算不用也最好把它写上,要是有构造函数的重载那这个函数就必须写就算你不用也要写。

/// <summary>
/// 添加参数
/// </summary>
/// <param name="UserName">登录名</param>
/// <param name="PassWord">密码</param>
/// <param name="com">SqlCommand对象</param>
/// <returns>SqlCommand对象</returns>
private static SqlCommand initParameter(string UserName, string PassWord, SqlCommand com)
{
SqlParameter pter = new SqlParameter();

pter.ParameterName = "@name";

pter.SqlDbType = System.Data.SqlDbType.VarChar;

pter.Size = 50;

pter.Value = UserName;

com.Parameters.Add(pter);


pter = new SqlParameter();

pter.ParameterName = "@pwd";

pter.SqlDbType = System.Data.SqlDbType.VarChar;

pter.Size = 50;

pter.Value = PassWord;

com.Parameters.Add(pter);


pter = new SqlParameter();

pter.ParameterName = "@message";

pter.SqlDbType = System.Data.SqlDbType.VarChar;

pter.Size = 200;

pter.Direction = System.Data.ParameterDirection.Output;

com.Parameters.Add(pter);

return com;
}
//定义这个方法首先要考虑的是这个方法的权限,返回值的数据类型,以及参数的类型以及参数的个数
//很显然这个方法定义的是一个私有的,且是一个静态的,返回值是是一个类,参数是从文本框输入的
//文本,所以是两个string类型的参数,还有一个类也要作为参数,因为在函数体中要用到命令对象的执行的
//在函数体中
//首先是实例化SqlParameter,作用是和数据库中的存储过程参数形成对应
//后面接着就是一系列的定义也要与存储过程中的参数每个细节都要进行对应的
//接着就是最重要的一个步骤是要将你定义的这个实例SqlParameter加到命令中
//都做完之后就是将命令实例返回

/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="com">SqlCommand对象</param>
/// <returns>判断登录信息</returns>
private static string Execute(SqlCommand com)
{
using (SqlConnection con = new SqlConnection(sqlConn))
{
com.Connection = con;

con.Open();

com.ExecuteNonQuery();

return com.Parameters["@message"].Value.ToString();
}
}
//这个方法是执行的结果,也就是返回数据库中定义的存储过程的输出参数
//private:这个也是一个访问权限,是私有的
//static:说明这个方法是一个静态的方法,静态的东西无需实例化
//string:这个是返回值的数据类型
//Execute:是方法的名字
//SqlCommand:这个是方法中参数的数据类型
//com:是变量

//在实例化是调用SqlConnection其中的一个构造函数,用来设置连接那个服务器数据库
//讲实例赋值给连接对象的连接
//打开连接
//命令对像执行相应的方法(这个方法是执行增删改的)
//返回的是存储过程输出内容

/// <summary>
/// 得到SqlCommand对象
/// </summary>
/// <returns>SqlCommand对象</returns>
private static SqlCommand GetCommand()
{
SqlCommand com = new SqlCommand();

com.CommandText = "Judge_a_landing";

com.CommandType = System.Data.CommandType.StoredProcedure;

return com;
}
//定义这个方法是在命令对象中的
//主要是在函数体中要设置是执行的是什么,很显然是存储过程,是对应数据库中的那个存储过程
//返回的也是一个命令类型

/// <summary>
/// 判断登录
/// </summary>
/// <param name="UserName">登录名</param>
/// <param name="PassWord">密码</param>
/// <returns>判断登录信息</returns>
public static string Login(string UserName, string PassWord)
{
return Execute(initParameter(UserName, PassWord, GetCommand()));
}
//这个步骤可以说最经典的一个步骤
//是调用上面所定义的方法,这里要非常有条理的知道调用是以什么样的过程
//首先是链接在最外面,接着是定义存储过程参数的方法,在这个方法中很重要的一个参数就是命令的
//
}
}

窗体部分

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;

namespace Login
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}

private void btnLogin_Click(object sender, EventArgs e)
{
string UserName = this.txtUserName.Text.Trim().Replace("'", "''");

string PassWord = this.txtPassWord.Text.Trim().Replace("'", "''");

MessageBox.Show(SqlHelper.Login(UserName, PassWord));
}
}
}

这个上面的东西能实现在VS中调用SQL中的存储过程。

要求是:有需要的人好好地看一下上面的东西,最好把它就住,不要出现拿着这个东西完成任务。

首先声明这个东西除了数据库之外其余的都不是我写的,但是写这个的人已经同意我使用了
只是觉得这个东西写的很好,对自己很有帮助才决定与他人分享的,要是写这个的人哪天不同意了,我会直接删掉...

原文地址:https://www.cnblogs.com/meroselove/p/1824973.html