在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 [email protected] 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 [email protected] 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);
三、在上面做好一切连接和防范工作后,就可以顺利的连接数据库,已存在的合法用户可以登录,结果如图:
若输入密码错误,按确定按钮后系统后把指针重新定在密码输入栏那里,提高系统的体验感:
输入正确的账号和密码后就能成功登录了,界面如下:
以上就是这次综合的学习总结了。
原文地址:https://www.cnblogs.com/Holiday-L/p/9710756.html