文接上回
这一篇文章介绍ADO.NET
什么是ADO.Net
ActiveX Data Objects
ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类用类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSSql Server),它提供了统一的编程接口让操作其它数据库(Access、Oracle等)的方式和操作MSSql Server一致
简单的来说就是一句话,用来连接数据库
在ADO.Net中连接数据库的步骤
-> 创建连接通道(SqlConnection)
-> 创建SQL命令对象(SqlCommand)
-> 开始查询
创建数据库的连接信息的字符串
用法1.使用Sql Sever2008 身份验证
// 书写格式
string str_con = @"server=机器名\实例名;database=数据库名;用户名=sa;密码=设置的密码";
// 例子
string str_con = @"server=.\sqlexperess;database=nreStu;uid=sa;pwd=123";
用法2:使用Windows身份验证
// 书写格式
string Stu_con = @"server=机器名\实例名;database=数据库名;integrated security=true";
// 例子
string Str_con = @"server=.\sqlexpress;database=newSru;integrated security=true";
添加config配置文件连接字符串(.net frameworl4.0才能实现)
1. 添加一个应用程序配置文件
2. 添加以下代码
<connectionStrings>
<add name="sql" connectionString="server=.\sqlexpress;database=newTextADO;integrated security=true"/>
</connectionStrings>
3. 添加引用 System.Configuration
4. 添加命名空间 using System.Configuration;
5. 读取 并使用
string str_con = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
执行插于语句 ExecuteNonQuery();
此用法只返回受影响的行数 适用于 增、删、改
// 添加命名空间
using System.Data.SqlClient;
// 拼接连接字符串需要用到的信息
string str_sqlCon = @"server=.\sqlexpress;database=Stu_text1000;integrated security=true";
// 使用信息创建连接 因为连接完要释放资源 所以要using
using (SqlConnection sqlCon=new SqlConnection(str_sqlCon))
{
// 执行sql语句 因为执行完要释放资源 所以要using
using (SqlCommand sqlCom=new SqlCommand(sb.ToString(),sqlCon))
{
// 判断是否连接 如果,没有连接 那么就打开连接
if(conn.State==System.Data.ConnectionState.Closed)
{
// 打开连接
sqlCon.Open();
}
// 执行sql语句 返回执行成功的语句条数int
int messCount=sqlCom.ExecuteNonQuery();
Console.WriteLine("{0}条数据受影响", messCount);
}
}
返回第一行第一列的结果 ExecuteScalar();
此种用法常用于聚合函数中 返回单一的值
// 创建数据库的各种信息
string str_con = @"server=.\sqlexpress;database=newStu;integrated security=true";
using (SqlConnection conn = new SqlConnection(str_con))
{
// 创建sql语句 查找年龄是20的 同学的个数
string sql = @"select count(*) from T_Persons where FAge=20";
// 创建连接
using (SqlCommand com = new SqlCommand(sql, conn))
{
// 判断连接是否关闭 如果关闭 就打开连接
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
// 返回第一行第一列的结果
// 这里使用 Convert
int count = Convert.ToInt32(com.ExecuteScalar());
Console.WriteLine("一共{0}个人", count);
}
}
返回多条数据 ExecuteReader();
此种用法常用于查询表中的多条数据
// 创建数据库信息的字符串
string Str_con = @"server=.\sqlexpress;database=newStu;integrated security=true";
// 创建连接
using (SqlConnection conn=new SqlConnection(Str_con))
{
// 准备sql语句 查看全表
string sql = @"select * from T_Persons";
// 执行sql语句
using (SqlCommand com=new SqlCommand(sql,conn))
{
// 判断连接是否关闭 如果关闭 就将连接打开
if (conn.State== System.Data.ConnectionState.Closed)
{
conn.Open();
}
// 执行sql语句 返回多条数据
SqlDataReader rader= com.ExecuteReader();
// 判断表中是否有数据
if (rader.HasRows)
{
// 一直读下一条语句 指向下一个数据
while (rader.Read())
{
// 括号中的数字是字段的编号 从0开始
int id = rader.GetInt32(0); // 返回id字段的数据
string name = rader.GetString(1); // 返回那么字段
string gender = rader.GetString(2); // 返回gender字段
int age = rader.GetInt32(3); // 返回age字段
// 第一种用法
Console.WriteLine("{0}\t{1}\t{2}\t{3}", id, name, gender, age);
// 第二种用法
Console.WriteLine("{0}\t{1}\t{2}\t{3}", rader["FId"], rader["FName"], rader["FGender"], rader["FAge"]);
}
}
}
}
使用参数化后的SQL语句进行查询
string uid = txtUid.Text; // 得到输入的uid
string pwd = txtPwd.Text; // 得到输入的pwd
string str_con = @"server=.\sqlexpress;database=loadDataBase;integrated security=true";
using (SqlConnection conn=new SqlConnection(str_con))
{
// 准备一条参数化后的sql语句
string sql = @"select count(*) from T_UserTable where FUserName=@uid and FPassWord=@pwd";
/这是一条未参数化的语句 跟上面的等价
string sql = string.Format(@"select count(*) from T_UserTable where FUserName='{0}' and FPassWord='{1}'", uid, pwd);
using (SqlCommand com=new SqlCommand(sql,conn))
{
// 参数化sql查询
// 方法一:使用ADD 要new
com.Parameters.Add(new SqlParameter("@uid", uid));
com.Parameters.Add(new SqlParameter("@pwd", pwd));
// 方法二:使用 AddWithValue 不用new
cmd.Parameters.AddWithValue("@uid", uid);
cmd.Parameters.AddWithValue("@pwd", pwd);
// 方法三:加入SqlParameter[]
cmd.Parameters.Clear(); // 使用前记得要清空数组
SqlParameter[] paras =
{
new SqlParameter("@Name",m.Name),
new SqlParameter("@Gender",m.Gender),
new SqlParameter("@Age",Convert.ToInt32(m.Age)),
};
// 将参数放在cmd中 与sql语句一起执行
cmd.Parameters.AddRange(paras);
// 判断数据库连接是否关闭
if (conn.State== System.Data.ConnectionState.Closed)
{
// 如果关闭 就开启
conn.Open();
}
// 执行SQL语句
int count =com.ExecuteNonQuery();
Console.WriteLine("成功执行 {0} 条语句",count);
}
判断数据库连接是否关闭,如果关闭就打开连接
// 判断是否连接 如果,没有连接 那么就打开连接
if(conn.State==System.Data.ConnectionState.Closed)
{
// 打开连接
sqlCon.Open();
}
ADO.Net中常用的三个方法
-> ExecuteNonQuery() 处理增、删、改,返回受影响行数
-> ExecuteScalar() 处理查询,返回首行首列
-> ExecuteReader() 处理查询,返回DataReader对象
(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt 所以会没有颜色 希望大家见谅)