ADO.NET基础知识点总结

ADO.NET

连接数据库

首先要有连接字符串,

然后是建立连接对象,

然后打开连接

使用完毕之后关闭连接(或者使用using语句块)

//使用sql server方式登陆
//Data Source:要连接的服务器名称
//Initial Catalog:要连接的数据库名称
string sqlServerConstr = @"Data Source=.\wqserver; Initial Catalog=lianxi1; User Id=ass; Password=123456";
//使用windows身份验证方式登陆
//Integrated Security=true:设置集成安全
string constr = @"Data Source=.\wqserver; Initial Catalog=lianxi1; Integrated Security=true";
//建立连接对象
SqlConnection connection = new SqlConnection(sqlServerConstr);
//连接数据库
connection.Open();
MessageBox.Show("打开成功");
connection.Close();
connection.Dispose();
MessageBox.Show("关闭连接");

使用using语句块

//使用windows身份验证方式登陆
string constr = @"Data Source=.\wqserver; Initial Catalog=lianxi1; Integrated Security=true";
//using语句块(在using语句块中开辟的资源会在using语句块结束后自动释放)
using (conn=new SqlConnection(constr))
{
    //打开连接
    conn.Open();
    MessageBox.Show("打开成功");
    //使用
    //这里不用手动关闭了哟
}

 

没关闭之前不能重复打开,所以可以在打开之前做一下判断

//判断当前对象是否已连接
if(ConnectionState.Closed==conn.State)
    conn.Open();

注意:可以重复关闭

//当状态改变时会触发一个事件
conn.StateChange += new StateChangeEventHandler(conn_StateChange);
//===============================================================================
void conn_StateChange(object sender, StateChangeEventArgs e)
        {
            //获取当前状态
            MessageBox.Show(e.CurrentState.ToString());
        }

自动生成连接字符串

方法一

这里以vs2010为例

1)工具→连接到数据库


选择数据源,这里我选Microsoft SQL Server,选择好之后点击继续


选择好要连接的地方后,点击高级


这里就是你想要的连接字符串了,复制出来就可以了


方法二
		//新建一个连接字符串类
            SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
            //设置服务器名
            scsb.DataSource = @".\wqserver";
            //设置要连接的数据库
            scsb.InitialCatalog = "lianxi1";
            //集成安全
            scsb.IntegratedSecurity = true;
            //获取连接字符串
            string constr = scsb.ConnectionString;

基本增删查改

执行非查询语句

string constr = @"Data Source=.\wqserver; Initial Catalog=webshop; Integrated Security=true";
using (SqlConnection conn=new SqlConnection(constr))
{
    //编写sql语句
    string sql = @"insert into users(u_ID,u_Name,u_Type,u_Password)values(312,'sada','普通','gdfgec');";
    //创建一个命令对象,执行sql语句
    using(SqlCommand cmd=new SqlCommand(sql,conn))
    {
        //打开连接
        conn.Open();
        // 执行一个非查询sql语句,返回受影响的行数
        int n= cmd.ExecuteNonQuery();
        //判断sql语句是否执行成功
        if(n>0)
        {
            MessageBox.Show("执行成功");
        }
    }
}

执行查询语句

string constr = @"Data Source=.\wqserver; Initial Catalog=webshop; Integrated Security=true";
using (SqlConnection conn=new SqlConnection(constr))
{
    //编写sql查询语句
    string sql = @"select * from goods";
    //创建一个命令对象,执行sql语句
    using(SqlCommand cmd=new SqlCommand(sql,conn))
    {
        //打开连接
        conn.Open();
        //执行一个查询sql语句,返回查询结果
        using (SqlDataReader dataReader=cmd.ExecuteReader())
        {
            //判断查询结果是否有数据
            if(dataReader.HasRows)
            {
                //将游标指向下一两条数据(循环取出每一条记录)
                while (dataReader.Read())
                {
                    //获取记录的第一列的数据
                    string str = dataReader.GetValue(0).ToString();
//获取记录的第二列的数据
                    str += ("----" + dataReader.GetValue(1).ToString());
                    listBox1.Items.Add(str);

                }
            }
        }
    }
}

当查询结果为单行单列时用

//返回查询结果的第一行第一列
cmd.ExecuteScalar();

根据列名获取列的索引

int n = dataReader.GetOrdinal("name");

获取当前记录的字段长度

//循环读取一条记录
for (int i = 0; i < dataReader.FieldCount; i++)
{
    Console.WriteLine(dataReader.GetValue(i));
}

当有多个结果集的时候

//前进到下一个结果集
while (dataReader.NextResult())
{
    //判断是否查询到记录
    if (dataReader.HasRows)
    {
        //前进到下一条记录
        while (dataReader.Read())
        {
            //循环读取一条记录
            for (int i = 0; i < dataReader.FieldCount; i++)
            {
                Console.WriteLine(dataReader.GetValue(i));
            } 
        }
    }
}

带参数的sql语句

//带参数的sql语句
string sql = @"select * from @name";
//
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    //设置参数
    cmd.Parameters.AddWithValue("@name", "goods");
}

注意:表名列名不能用参数代替的

获取配置文件中的连接字符串

首先创建一个配置文件

选择常规→应用程序配置文件


配置文件名称一定不要改哟,用默认的就好,改了会出错的。

打开配置文件就可以写连接字符串了


在使用配置文件的时候需要添加引用


在项目中使用配置文件中的连接字符串

//获取配置文件中的连接字符串
string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;

数据绑定

//创建一个集合
List<person> personList = new List<person>();
person per = new person() {Id = 100, Name = "张三"};
person per2 = new person() { Id = 111, Name = "李四" };
//添加数据
personList.Add(per);
personList.Add(per2);
//设置控件中每一项实际显示的值
listBox1.DisplayMember = "Name";
//设置控件中每一项value中实际存储的值
listBox1.ValueMember = "Id";
//绑定数据源
listBox1.DataSource = personList;

person类

public class person
{
    //一定要设置成属性,不能是字段,否则无法绑定的
    public int Id { get; set; }
    public string Name { get; set; }
}

获取值

//获取选中项value中的实际值
int id = (int) listBox1.SelectedValue;

DataSet的使用

什么是DataSet:

         数据集合,临时数据库,内存数据库

string constr = @"Data Source=.\wqserver; Initial Catalog=WebShop; Integrated Security=true";
string sql = "select * from goods";
//创建连接数据库的一个适配器
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
//创建一个DataSet
DataSet ds=new DataSet();
//绑定DataSet
adapter.Fill(ds);
//绑定数据
dataGridView1.DataSource = ds.Tables[0];

使用SQLDataAdapter实现分页

string constr = @"Data Source=.\wqserver; Initial Catalog=WebShop; Integrated Security=true";
string sql = "select * from goods";
//创建连接数据库的一个适配器
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
//创建一个表
DataTable daaTable = new DataTable();
//绑定,只要前5行数据
adapter.Fill(0, 5, daaTable);
//绑定数据
dataGridView1.DataSource = daaTable;

封装SQLHelper

/// <summary>
/// 可以实现增删查改
/// </summary>
public static class SqlHelper
{
    //获取配置文件中的连接字符串,并设置成只读的
    private static readonly string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
    /// <summary>
    /// 执行非查询语句,返回受影响的行数
    /// </summary>
    /// <param name="sql">sql语句</param>
    /// <param name="pms">参数</param>
    /// <returns>返回受影响的行数</returns>
    public static int ExecuteNonQuery(string sql,params SqlParameter[] pms)
    {
        using (SqlConnection conn=new SqlConnection(constr))
        {
            using (SqlCommand cmd=new SqlCommand(sql,conn))
            {
                if (pms!=null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
    }

    /// <summary>
    /// 执行非查询语句,返回首行首列
    /// </summary>
    /// <param name="sql">sql语句</param>
    /// <param name="pms">sql的参数</param>
    /// <returns>返回首行首列</returns>
    public static object ExecuteScalar(string sql,params SqlParameter[] pms)
    {
        using (SqlConnection conn = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                conn.Open();
                return cmd.ExecuteScalar();
            }
        }
    }
    /// <summary>
    /// 执行一个查询语句,返回一个SQLDataReader,用完几个close哟
    /// </summary>
    /// <param name="sql">sql语句</param>
    /// <param name="pms">sql语句的参数</param>
    /// <returns>返回的SQLDataReader</returns>
    public  static SqlDataReader ExecuteReader(string sql,params SqlParameter[] pms)
    {
        SqlConnection conn = new SqlConnection(constr);
        using (SqlCommand cmd=new SqlCommand(sql,conn))
        {
            if(pms!=null)
            {
                cmd.Parameters.AddRange(pms);
            }
            conn.Open();
            //设置这个参数后,以后当用户关闭reader时,sqlconnection也就自动关闭了
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
    }
    /// <summary>
    /// 执行一个查询语句,返回一个DataTable
    /// </summary>
    /// <param name="sql">sql语句</param>
    /// <param name="pms">参数</param>
    /// <returns>返回DataTable</returns>
    public static DataTable ExecuteDataTable(string sql,params SqlParameter[] pms)
    {
        SqlDataAdapter sqlAdapter = new SqlDataAdapter(sql,constr);
        if (pms!=null)
        {
            sqlAdapter.SelectCommand.Parameters.AddRange(pms);
        }
        DataTable dt = new DataTable();
        sqlAdapter.Fill(dt);
        return dt;
    }
}

调用存储过程

实例:验证用户登录

string uid = tb_uid.Text;
string pwd = tb_pwd.Text;
string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
bool tag; //用来接受存储过程中那个output参数
using(SqlConnection conn=new SqlConnection( constr))
{
    //调用存储过程只需要写存储过程名称,参数在后面再加
    string sql = "ulogin";
    using (SqlCommand cmd=new SqlCommand(sql,conn))
    {
        //设置参数
        SqlParameter[] pms=new SqlParameter[]
        {
            new SqlParameter("@uid",uid),
            new SqlParameter( "@pwd",pwd),
            //output输出参数就不需要设置值了
            new SqlParameter("@tag",SqlDbType.Bit)
        };
        //设置参数为输出参数
        pms[2].Direction = ParameterDirection.Output;
        cmd.Parameters.AddRange(pms);
        //设置命令类型为存储过程
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        //这里用下面三个方法哪一个都行,只要执行了sql语句就行
        //cmd.ExecuteScalar();
        //cmd.ExecuteReader();
        cmd.ExecuteNonQuery();
        //当执行完sql语句之后获取到输出参数的值
        tag =Convert.ToBoolean(pms[2].Value);
    }
}
//判断输出参数的值,就可以知道登陆是否成功,用户名和密码是否匹配
if (tag)
{
    MessageBox.Show("登陆成功");
}
else
{
    MessageBox.Show("登陆失败");
}

使用事务

string constr = @"Data Source=.\wqserver; Initial Catalog=lianxi1; Integrated Security=true";
using(SqlConnection conn=new SqlConnection(constr))
{
    conn.Open();
    //创建一个事务对象
    SqlTransaction tran = conn.BeginTransaction();
    string sql = "delete from users where uid='qwe';";
    using (SqlCommand cmd=new SqlCommand(sql,conn))
    {
        //设置sql命令的事务对象
        cmd.Transaction = tran;
        int r = cmd.ExecuteNonQuery();
        Console.WriteLine("所影响的行数{0}",r);
        //回滚
        tran.Rollback();
        Console.WriteLine("回滚");
        //提交
        //tran.Commit();
       // Console.WriteLine("提交了");
    }
}
Console.ReadKey();

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值