1. 程式人生 > >ADO.NET--SqlConnection、SqlCommand的學習

ADO.NET--SqlConnection、SqlCommand的學習

出錯 服務器名稱 private message mode ring 添加 rgs 不同

在Sql中,SqlConnection對象和SqlCommand對象是數據庫連接應用中非常重要的兩個對象,以下是本次學習以及綜合前面所學的知識總結。

一、思維導圖:

技術分享圖片

二、SqlCommand和SqlConnection使用的代碼展示:

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.Data.SqlClient;//手動添加的語句
namespace LogIn
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
private void btn_LogIn_Click(object sender, EventArgs e)

{
SqlConnection sqlConnection = new SqlConnection(); //聲明並實例化SQL連接;
sqlConnection.ConnectionString =
"Server=‘DXL-D55E6339D08‘;Database=EduBaseDemo;Integrated Security=sspi"; //在字符串變量中,server是本計算機的服務器地址、數據庫名稱、此windows驗證


SqlCommand sqlCommand = new SqlCommand(); //聲明並實例化SQL命令;
sqlCommand.Connection = sqlConnection; //將SQL命令的屬性Connection指向SQL連接;
sqlCommand.CommandText = //指定SQL命令的命令文本;命令文本由字符串拼接而成;
"SELECT COUNT(1) FROM tb_User"
+ " WHERE No=‘" + this.tx_UserNo.Text.Trim() + "‘" //將文本框的文本清除首尾的空格後,拼接至命令文本中;
+ " AND Password=HASHBYTES(‘MD5‘,‘" + this.txb_Password.Text.Trim() + "‘);";
sqlConnection.Open(); //打開SQL連接;
int rowCount = (int)sqlCommand.ExecuteScalar(); //調用SQL命令的方法ExecuteScalar來執行命令,並接受單個結果(即標量);
//執行標量的返回結果類型為object,可通過強制類型轉換,轉為整型;
sqlConnection.Close(); //關閉SQL連接;
if (rowCount == 1) //若查得所輸用戶號相應的1行記錄;
{
MessageBox.Show("登錄成功。"); //給出正確提示;
}
else //否則;
{
MessageBox.Show("用戶號/密碼有誤,請重新輸入!"); //給出錯誤提示;
this.txb_Password.Focus(); //密碼文本框重新獲得焦點;
this.txb_Password.SelectAll();
}
}
}
}

參數寫法:

SqlConnection sqlConnection = new SqlConnection(); //聲明並實例化SQL連接;
sqlConnection.ConnectionString =
"Server=(local);Database=EduBaseDemo;Integrated Security=sspi"; //在字符串變量中,描述連接字符串所需的服務器地址、數據庫名稱、集成安全性(即是否使用Windows驗證);
SqlCommand sqlCommand = sqlConnection.CreateCommand(); //調用SQL連接的方法CreateCommand來創建SQL命令;該命令將綁定SQL連接;
sqlCommand.CommandText =
"SELECT COUNT(1) FROM tb_User WHERE No=@No AND Password=HASHBYTES(‘MD5‘,@Password);"; //指定SQL命令的命令文本;命令文本包含參數;
#region SQL參數用法1
SqlParameter sqlParameter = new SqlParameter(); //聲明並實例化SQL參數;
sqlParameter.ParameterName = "@No"; //設置SQL參數的名稱;
sqlParameter.Value = this.txb_UserNo.Text.Trim(); //設置SQL參數的長度;
sqlParameter.SqlDbType = SqlDbType.Char; //設置SQL參數對應的SQL Server數據類型;
sqlParameter.Size = 10; //設置SQL參數的長度;
sqlCommand.Parameters.Add(sqlParameter); //向SQL命令的參數集合添加SQL參數;
#endregion
#region SQL參數用法2
sqlCommand.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim()); //直接調用方法AddWithValue向SQL命令的參數集合添加參數的名稱、值;
sqlCommand.Parameters["@Password"].SqlDbType = SqlDbType.VarChar; //通過參數名稱訪問SQL參數,並將密碼參數的類型設為變長字符串;
//SQL參數能自動識別類型;若參數值為字符串,則類型自動設為NVARCHAR,且可在執行時自動轉換;但對於相同密碼,VARCHAR/NVARCHAR類型所獲得的散列值不同,故需手動將SQL參數類型統一設為VARCHAR;
#endregion
sqlConnection.Open(); //打開SQL連接;
int rowCount = (int)sqlCommand.ExecuteScalar(); //調用SQL命令的方法ExecuteScalar來執行命令,並接受單個結果(即標量);
sqlConnection.Close(); //關閉SQL連接;
if (rowCount == 1) //若查得所輸用戶號相應的1行記錄;
{
MessageBox.Show("登錄成功。"); //顯示正確提示;
}
else //否則;
{
MessageBox.Show("用戶號/密碼有誤,請重新輸入!"); //顯示錯誤提示;
this.txb_Password.Focus(); //密碼文本框獲得焦點;
this.txb_Password.SelectAll();

代碼過程分析:

(1)using System.Data.SqlClient 語句是調用引用,是在System.Data窗體中添加;

(2)SqlConnection是用於數據庫的連接,構造方法有兩種:有參構造和無參構造;SqlConnection創建對象也有兩種。

(3)數據庫連接有兩種方法:一種是sql server身份驗證: Server=所需連接的服務器地址‘;Database=所要連接的數據庫;Uid=sql server的用戶名;Pwd=登錄密碼"; 另一種是windows驗證連接 :”Server=服務器名稱;Database=所要連接的數據庫;Integrated Security=sspi";

(4)SqlCommand 命令中,也有兩種方法創建對象 一種:SqlCommand sqlCommand = new SqlCommand();

sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText =
"SELECT COUNT(1) FROM tb_User"+ " WHERE No=‘" + this.tx_UserNo.Text.Trim() + "‘" //命令由字符串拼接而成

(5)ExecuteScalar 方法用於計算單個值,執行select後生成一行記錄,來驗證數據庫中是否有記錄:

if (rowCount == 1) //若查得所輸用戶號相應的1行記錄;
{
MessageBox.Show("登錄成功。"); //給出正確提示;
}
else //否則;
{
MessageBox.Show("用戶號/密碼有誤,請重新輸入!"); //給出錯誤提示;

(6)sqlCommand有參數的命令文本可有效防止被註入式攻擊:一種參數寫法如下:

sqlCommand.CommandText =
"SELECT COUNT(1) FROM tb_User WHERE No=@No AND Password=HASHBYTES(‘MD5‘,@Password);"

另一種參數法如下:

SqlParameter sqlParameter = new SqlParameter();
sqlParameter.ParameterName = "@No";
sqlParameter.Value = this.txb_UserNo.Text.Trim();
sqlParameter.SqlDbType = SqlDbType.Char;
sqlParameter.Size = 10;
sqlCommand.Parameters.Add(sqlParameter);

三、在上面做好一切連接和防範工作後,就可以順利的連接數據庫,已存在的合法用戶可以登錄,結果如圖:

技術分享圖片

若輸入密碼錯誤,按確定按鈕後系統後把指針重新定在密碼輸入欄那裏,提高系統的體驗感:

技術分享圖片

輸入正確的賬號和密碼後就能成功登錄了,界面如下:

技術分享圖片

以上就是這次綜合的學習總結了。

ADO.NET--SqlConnection、SqlCommand的學習