学习笔记(三)——数据库命令的应用
一、存储过程
(一)基本概念
存储过程就是固化SQL数据库系统内部的SQL语句,这样做的好处是可以提高执行效率,提高数据库的安全性,减少网络流量。
(二)创建存储过程
1、基本语法
CREATE PROCEDURE procedure_name
{ @parameter data_type}
As
--具体语句
Go
--可加可不加,Go的意思是另起一页,若下边不写语句可以不加
2、在存储过程usp_insertUser中插入用户
GO
CREATE PROCEDURE usp_insertUser
(@No VARCHAR(10)
,@Password VARCHAR(20))
AS
BEGIN
INSERT tb_User
(No,Password)
VALUES
(@No
,HASHBYTES('MD5',@Password));
END
(三)调用存储过程
string strsql = "Data Source=localhost;Initial Catalog=######;Integrated Security=True";//数据库链接字符串
string sql = " usp_insertUser ";//要调用的存储过程名
SqlConnection conn = new SqlConnection(strsql);//SQL数据库连接对象,以数据库链接字符串为参数
SqlCommand comStr = new SqlCommand(sql, conn);//SQL语句执行对象,第一个参数是要执行的语句,第二个是数据库连接对象
comStr.CommandType = CommandType.StoredProcedure;//因为要使用的是存储过程,所以设置执行类型为存储过程
//依次设定存储过程的参数
comStr.Parameters.Add("@Param1", SqlDbType.Text).Value = "####";
conn.Open();//打开数据库连接
MessageBox.Show(comStr.ExecuteNonQuery().ToString());//执行存储过程
SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(comStr);
DataTable DT=new DataTable ();
SqlDataAdapter1.Fill(DT);
dataGridView1.DataSource = DT;
conn.Close();//关闭连接
二、面向对象_类
(一)类的定义
1、基本语法
<访问修饰符>class<类名>
{ 类成员(字段、属性、方法、事件)}
2、类的修饰符
Public | 公有访问,不受任何限制 |
Private | 私有访问,只限于本类成员访问,子类、实例都不能访问 |
Protected | 保护访问。只限于本类和子类访问,实例不能访问 |
Internal | 内部访问。只限于本项目内访问,其他不能访问 |
Protected internal | 内部保护访问。只限于本项目或是子类访问,其他不能访问 |
(二)类的实例化
1、基本语法
<类名> <实例名>= new <类名>
{ 构造函数的参数}
(三)构造函数
又称构造方法
<访问修饰符> 返回值类型 方法名 (参数列表)
{
方法体
}
【例】
附:课程示例
在登录控件下的代码:
this.User.No = this.txb_UserNo.Text.Trim();
//将文本框的文本清除首尾的空格后,赋予用户的相应属性;
this.User.Password = this.txb_Password.Text.Trim();
this.User.LogIn(); //调用用户的方法登录,并将各文本框的文本作为参数;
MessageBox.Show(this.User.Message); //在消息框中显示登录消息;
if (!this.User.HasLoggedIn) //若用户未完成登录,即登录失败;
{
this.txb_Password.Focus(); //密码文本框获得焦点;
this.txb_Password.SelectAll(); //密码文本框内所有文本被选中;
}
我们仅需用这简短的代码就可以完成登录的过程,但是我们还需要编写相关类的代码。
因为引用SQL数据库操作类,一般在进行数据库操作的时候会引入命名空间。所以在编写类的时候,我们需要在页面上方写下如下代码:
using System.Data; //包含各类数据对象;
using System.Data.SqlClient; //包含访问SQL Server所需的各类对象;
using System.Configuration; //包含访问配置文件所需的配置管理器;需事先在本项目的“引用”中添加对System.Configuration的引用;
这个时候我们可以编写相关类:
public class User
{
/// 公有属性:用户号;
public string No
{
get;
set;
}
/// 公有属性:密码;
public string Password
{
get;
set;
}
/// 公有属性:是否完成登录;
public bool HasLoggedIn
{
get;
set;
}
/// 公有属性:消息;
/// (用于返回验证结果)
public string Message
{
get;
set;
}
/// 公有方法:登录;
public void LogIn()
{
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ToString(); //配置管理器从App.config读取连接字符串;
SqlCommand sqlCommand = sqlConnection.CreateCommand(); //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;
sqlCommand.CommandText = "usp_selectUserCount"; //指定SQL命令的命令文本;命令文本为存储过程名称;(运用到了2.5的知识。)
sqlCommand.CommandType = CommandType.StoredProcedure; //SQL命令的类型设为存储过程;
sqlCommand.Parameters.AddWithValue("@No", this.No); //向SQL命令的参数集合添加参数的名称、值;
sqlCommand.Parameters.AddWithValue("@Password", this.Password);
sqlConnection.Open(); //打开SQL连接;
int rowCount = (int)sqlCommand.ExecuteScalar(); //调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果(即标量);
sqlConnection.Close(); //关闭SQL连接;
if (rowCount == 1) //若查得所输用户号相应的1行记录;
{
this.HasLoggedIn = true; //完成登录;
this.Message = "登录成功。"; //给出正确提示;
}
else //否则;
{
this.HasLoggedIn = false; //未完成登录;
this.Message = "用户号/密码有误,请重新输入!"; //给出错误提示;
}
}
}