欣晨的第一次学习笔记--ado.net,sqlconnection,sqlcommand
一、知识描述点
ADO.NET
组成数据提供程序的类:
Connection是用来来建立和数据库的连接。
Command是用来执行SQL命令和存储过程。
1、SqlConnection
1) 使用SqlConnection类可以连接到SQL Server数据库。SqlConnection对象的主要属性和方法如下:
属性:ConnectionString(连接字符串)
方法:Open(打开数据库连接)
Close(关闭数据库连接)
2) 连接数据库主要分以下三步:
定义字符串
创建SqlConnection对象,代码如下:
SqlConnection sqlConnection = new SqlConnection();
打开数据库连接,代码如下:
sqlConnection.Open();
a) 使用windows验证
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString = "Server=(Local);Database=EduBaseDemo;Integrated Security=sspi";
//在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性
b) 使用sql连接验证
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString = "Server=(Local);Database=EduBaseDemo;Integrated
Security=false;user id=sa;password=sa";
//在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性
2、SqlCommand
一、SqlCommand对象用于执行具体的SQL语句,如增加、删除、修改、查找。SqlCommand对象的使用步骤如下。
创建SqlConnection对象。
定义SQL语句。
创建SqlCommand对象。
调用SqlCommand对象的某个方法,执行SQL语句。
二、Sqlcommand的应用
Sqlcommand对象允许您指定在数据库上执行的操作类型。例如,可以在数据库中的行数据上执行SELECT、INSERT、修改和DELETE命令。SqlCommand对象可以用于支持断开连接的数据管理,但我们将只单独使用SqlCommand对象。Sql DataAdapter适配器后面的过程将解释如何使用断开的数据来实现应用程序。
创建SqlConnection对象的两种形式:
1、
SqlConnection connection = new SqlConnection(“data
source=.; database=SampleDB; integrated security=SSPI”);
2、
SqlConnection connection = new SqlConnection();
connection.ConnectionString = “data source=.;
database=SampleDB; integrated security=SSPI”;
实例
using System.Data.SqlClient;
using System.Data;
//定义链接
SqlConnection conn;
/定义命令
SqlCommand cmd;
//定义datareader
SqlDataReader myreader;
//定义两个变量用来存储数据库链接字符串和命令字符串
string connstr, selectcmd;
connstr = ConfigurationManager.ConnectionStrings[“FANXXConnectionString”].ToString();
selectcmd = “SELECT COUNT(*) AS Expr1 FROM TAB1TMP
WHERE (COL1 = ‘” + col1 + “’)
AND (COL2 = ‘” + col2 + “’)”;
//实例化链接并打开
conn = new SqlConnection(connstr);
conn.Open();
//实例化cmd并制定执行语句与执行链接
cmd = new SqlCommand(selectcmd, conn);
//执行查询命令并赋给datareader
//myreader = cmd.ExecuteReader();
//或者只是获取一个单值 ,当然还有只执行无效返回的nonquery
int lv_count = cmd.ExecuteScalar().ToString();
if (myreader.Read())
{
}
myreader.Close();
//切记关闭连接,释放资源
conn.Close();
二、思维导图
三、其他补充
1、用户注册代码
2、注意问题
这种密码赋值很容易受到注入式攻击
所输入的这些字符改了原代码,我们来分析下为什么
‘ ) or 1=1 ;--可以成功登陆
(1)or前后只要有一方成立则为成立,而1=1是一个恒成立的等式。
(2)--会注释掉后面所输入的任何代码。
为了解决这个问题可以使用如下带参数代码:
sqlCommand.CommandText ="INSERT tb_User (No,Password) VALUES(@No,HASHBYTES ('MD5',@Password));";
sqlCommand.Parameters.AddWithValue("@No",this.txb_UserNo.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Password",this.txb_Password.Text.Trim());
sqlCommand.Parameters["@Password"].SqlDbType=SqlDbType.VarChar;