學習筆記(三)——數據庫命令的應用
學習筆記(三)——數據庫命令的應用
一、存儲過程
(一)基本概念
存儲過程就是固化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 = "用戶號/密碼有誤,請重新輸入!"; //給出錯誤提示;
}
}
}
學習筆記(三)——數據庫命令的應用