ADO.NET--SqlConnection、SqlCommand的学习

在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

时间: 2024-09-28 12:50:29

ADO.NET--SqlConnection、SqlCommand的学习的相关文章

关于ADO.Net SqlConnection的性能优化

Connections Database connections are an expensive and limited resource. Your approach to connection management can significantly affect the overall performance and scalability of your application. Issues to consider include acquiring and releasing co

S2 第二本书 深入.NET平台和C#编程 总结 by天命

第一章 深入.NET框架 .NET框架 包含 CLR公共语言运行时 FCL框架类库 CLR(Common Language Runtime)公共语言运行时 CLS(Common Language Specific)公共语言规范 CTS(Common Type System)公共类型系统 FCL(Framework Class Library)框架类库 基本框架类(线程 ADO.NET XML类 文件IO类...... Web窗体 MVC WinForms ADO.NET SqlConnectio

ADO.Net之SqlConnection、 Sqlcommand的应用学习心得(思维导图,知识解析,案例分析)

ADO.Net之SqlConnection. Sqlcommand的应用 一.思维导图: ADO.NET与SQL连接: 二.知识点介绍: SqlConnection和Sqlcommand都是组成数据提供程序的类. SqlConnection使用它来建立和数据库的连接,Sqlcommand使用它执行SQL命令和存储过程. ADO.NET有两种类型的对象:基于连接的和基于内容的,SqlConnection和Sqlcommand属于基于连接的,它们连接到数据库,执行SQL语句,遍历只读结果集或者填充D

Java进击C#——语法之ADO.NET

本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分的知识点了.笔者根据使用数据库方式的不同又分为有线连接和无线连接(关于有线和无线的叫法是笔者个人定义的.因为看了不同的书里面很多叫法).不管是什么样子的叫法.只要明白有线是保持连接的状态下操作数据库.而无线是连接之后复制一份副本,关闭连接,对副本进行操作之后,在连接更新数据库.笔者认为如果只是使用的

ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)

转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据.数据源可以来自关系数据库或者XML文件,甚至WebService返回结果.其中最重要的一个类就是SqlBulkCopy类,使用它

ADO.NET - 全面梳理

转自:http://www.cnblogs.com/yangcaogui/archive/2012/06/09/2537086.html 目录: 简单的介绍下ADO.NET SqlConnection(连接对象) SqlCommand(命令对象) SqlParameter(Sql参数) SqlDataReader(数据流读取器) SqlTransaction(事务) SqlDataAdapter(数据适配器) DataSet,DataTable,DataRow,DataColumn 封装数据库操

ADO.NET梳理

目录: 简单的介绍下ADO.NET SqlConnection(连接对象) SqlCommand(命令对象) SqlParameter(Sql参数) SqlDataReader(数据流读取器) SqlTransaction(事务) SqlDataAdapter(数据适配器) DataSet,DataTable,DataRow,DataColumn 封装数据库操作类(这才是精华) 一丶简单的介绍下ADO.NET 了解System.Data命名空间下我们常用的一些类: 1 ①System.Data

ADO.NET的基础

ADO.NET体系结构     Connection 提供和数据源的连接功能     Command 提供运行访问数据库命令,传送数据或修改数据的功能,例如运行SQL命令和存储过程等.   .NET Data Provider DataAdapter 是DataSet对象和数据源间的桥梁.DataAdapter使用4个Command对象来运行查询.新建.修改.删除的SQL命令,把数据加载到DataSet,或者把DataSet内的数据送回数据源.     DataReader 通过Command对

ADO .NET 链接 增删改查

ADO.NET: 数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中也可以将数据库中的数据提取到内存中供程序调用 所有数据访问技术的基础 连接数据库基本格式:需要两个类1.数据库连接类 SqlConnection2.数据库操作类 SqlCommand //1.连接数据库//写连接字符串,立马就要想到有4点要写完,1.连接哪台服务器,2.连接哪个数据库,3.连接用户名,4.密码string sql = "server=.;database