ADO.NET数据访问方式:SqlDataReader
-
SqlDataReader读取数据方法的封装: SqlHelper.ExecuteRead(string sql,params SqlParameter[] a,…)
class SqlHelper
{
SqlDataReader SqlDataReader ExecuteRead(string s,params SqlParameter[] ps)
{
string str = Configuration.ConnectionStrings[“str”].ConnectionString
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
foreach(SqlParaneter param in parameters)
{
cmd.Parameters.Add(param);
}
return cmd.ExucuteReader();
}
}
}
}
- SqlCommand(System.Data.SqlClient名称空间)
- SqlCommand表示向服务器提交的一个命令(SQL语句等)
- .CommandText属性为要执行的SQL语句
- .ExecuteNonQuery()方法执行一个非查询语句(update/insert/delete等)/返回值为执行的影响行数
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “insert t_users(username,password)values(‘admin’,’888888’)”;
cmd.ExecuteNonQuery();
}
- .ExecuteReader()方法: 将.CommandText发送到.Connection(SqlConnection类实例)并生成一个SqlDataReader
- .ExecuteScalar()方法用于执行查询(返回结果集第一行第一列数据)/返回值object类型
例: 获得自动增长字段主键值(() output inserted.*(主键值) values())
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “insert t_users(name,age) output inserted.id values(‘lily’,21)”;
cmd.ExecuteScalar();
}
- SqlDataReader
- SqlDataReader: 提供一种从 SQL Server 数据库读取行的只进流的方式/该类不能被继承
- .Read()方法: 使SqlDataReader前进到下一条记录/返回布尔值
- .GetOrdinal()方法: 在给定列名称的情况下获取列序号
- .GetString()方法: 获取指定列的字符串形式的值/列序号从0开始
例: ①按照用户提供的用户名/密码插入数据库 ②用户名登陆练习 ③输出数据库数据条目数 ④输出员工表姓名列abcdefghijk…
- 注入漏洞与参数化查询
- SqlCommand.Parameters: SqlParameterCollection类/表示与SqlCommand相关联的参数的集合
- SqlParameter: 表示SqlCommand的参数
例: 注入漏洞与参数化查询
cmd.CommandText = "select count(*) from t_employee where name=@userName and password=@passWord+";
cmd.Parameters.Add(new SqlParameter("userName",userName));
cmd.Parameters.Add(new SqlParameter(“passWord”,passWord));
- 案例
- 例: 用户界面进行登陆判断 输错三次禁止登陆 用数据库记录ErrorTimes
- 连接字符串写到配置文件中
- 例: 文件导入导出
- 数据导入: 从文本文件导入用户信息
- 数据导出: 将用户信息导出到文本文件
- tab键代码缩进