Net学习日记_ADO.Net_3

整个ADO包含两大部分:数据提供程序数据集

NonQuery :非查询,只要影响行数

Scalar :查询出来的数据,只要第一行第一列

Reader:查询出来的数据,全部都要(所有行,所有列),大数据量的

不同:

DataSet:查询出来的数据,全部都要(所有行,所有列),比较小数据量的,因为 DataSet是一次新吧所有查询出来的数据全部都搬回 本地内存中

 

DataSet

把数据库查询过后的 结果集 拿到本地来存储在本地内存中,就变成了数据集。

DataSet=ds; DaTable=dt;DataRow=dra;DataColumn =dc

 

DataSet包含多个DaTable,DaTable被包含在DataSet 的DaTableCollection中

DataSet.DaTableCollection[0]--->DataTable。

DataTable包含多个DataColumn,DataColnumn被包含在DataTable的DataColumnCollection中。

DataTable包含多个DataRow ,DataRow被包含在DataTable 的DataRowCollection中。

 

SqlDataAdapter

相当于卡车的作用,自动的根据命令到数据库查询数据,并且拿回来,倒在零时的数据仓库(DataSet),不用手动打开数据库连接,不用手动创建命令对象,不用手动关闭连接通道.

 

简单的下拉菜单:

using System;
using System.Data;
using System.Windows.Forms;
using Ado3;

namespace FstuAdd
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cbba_SelectedIndexChanged(object sender, EventArgs e)
        {
            MessageBox.Show(cbba.SelectedValue.ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataSet ds = SqlHelper.ExcuteDataSet("select * from Classes");
            
            cbba.DisplayMember = "Name";
            cbba.ValueMember = "id";
            cbba.DataSource = ds.Tables[0];
            
        }
    }
}

Hepler类

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ado3
{
    class SqlHelper
    {

        static string contr = "server=PC201609230944\\SQL2005;database=HeiMaBlog;user=sa;pwd=123456";

        public static DataSet ExcuteDataSet(string sql)
        {
            using (SqlConnection conn = new SqlConnection(contr))
            {
                using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conn))
                {
                    using (DataSet ds = new DataSet())
                    {
                        adapter.Fill(ds);
                        return ds;
                    }
                }
            }

        }

    }
}

 

利用SqlSet自己建表

DataSet ds = new DataSet();//创建了一个 空 的数据集
DataTable dt = new DataTable();//创建一个空的数据表
ds.Tables.Add(dt);//将创建出来的表,添加到数据集的表集合中

DataColumn dc = new DataColumn();//创建一个列
dc.ColumnName = "id";//指定列名
dc.DataType = typeof(int);//指定列的类型
dc.AllowDBNull = false;//指定不能为null
dc.Unique = true; //不能重复
dc.AutoIncrement = true;//自动增长
dc.AutoIncrementSeed = 100;//增长种子
dc.AutoIncrementStep = 10;//增量
dt.Columns.Add(dc);//把列添加到表中

DataColumn dcName = new DataColumn();
dcName.ColumnName = "Name";
dcName.DataType = typeof(string);
dcName.AllowDBNull = false;
dt.Columns.Add(dcName);

//不能调用new,构造函数访问不到,被保护
//要询问数据表,你有什么列,告诉我,然后我就有什么列
DataRow dr = dt.NewRow();

dr[1] = "张三";//设置name
dt.Rows.Add(dr);//添加到行集合中

DataRow dr2 = dt.NewRow();
dr2[0] = 1;//手动设置id
dr2[1] = "李四";
dt.Rows.Add(dr2);
//如果手动赋值了id列,就是手动赋值的值,如果不手动赋值,那么就跟着种子和增量走

DataRow dr3 = dt.NewRow();
dr3[1] = "张三2";
dt.Rows.Add(dr3);

//打印数据集中有几张表
MessageBox.Show(ds.Tables.Count.ToString());
//打印第一张表有几个列
MessageBox.Show(ds.Tables[0].Columns.Count.ToString());
//打印第一张表有几行
MessageBox.Show(ds.Tables[0].Rows.Count.ToString());
//打印第一张表的第一行的第一列
MessageBox.Show(ds.Tables[0].Rows[0][0].ToString());
//打印第一张表的第二行的第一列
MessageBox.Show(ds.Tables[0].Rows[1][0].ToString());
//打印第一张表的第三行的第一列
MessageBox.Show(ds.Tables[0].Rows[2][0].ToString());

 

 

内部:其实也是有一个SqlCommand 对象的,通过命令对象返回DataReader,然后再通过读取器读取数据,填充数据集。

 

带有配置文件的省市联动:

主程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Ado3;

namespace FssId
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<Area> list = SqlHelper.ExecuteList("select * from Area where ar_uid = 0");

            cbba.DisplayMember = "Ar_name";
            cbba.ValueMember = "Ar_id";
            cbba.DataSource = list;
        }

        private void cbba_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlParameter sp = new SqlParameter("@uid",cbba.SelectedValue);

            List<Area> list = SqlHelper.ExecuteList("select * from Area where ar_uid = @uid",sp);

            cbbb.DisplayMember = "Ar_name";
            cbbb.ValueMember = "Ar_id";
            cbbb.DataSource = list;
        }
    }
}

SqlHelper类

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FssId;

namespace Ado3
{
    class SqlHelper
    {
        // WinForm项目,添加对“System.Configuration”的引用
        // 对配置文件connectionStrings节进行读取。
        static string contr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

        /// <summary>
        /// 查询数据库,返回一张表
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(sql,contr);
            adapter.SelectCommand.Parameters.AddRange(parameters);
            try
            {
                adapter.Fill(ds);
                return ds.Tables[0];
            }
            catch
            {
                return null;
            }       
        }

        /// <summary>
        /// 输入参数更改
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(contr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    conn.Open(); // 这个的报错不用捕捉
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(contr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    conn.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }

        /// <summary>
        /// 针对某个类,进行SqlDataReader读取
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static List<Area> ExecuteList(string sql, params SqlParameter[] parameters)
        {
            List<Area> list = null;

            using(SqlConnection conn = new SqlConnection(contr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    if (dr.HasRows)
                    {
                        list = new List<Area>();
                        Area ar;
                        while (dr.Read())
                        {
                            ar = new Area();
                            ar.Ar_id = dr.GetInt32(0);
                            ar.Ar_name = dr[1].ToString();
                            ar.Ar_uid = dr.GetInt32(2);
                            list.Add(ar);
                        }
                    }
                }
            }
            if (list != null)
            {
                return list;
            }
            else
            {
                return null;
            }
        }


    }
}

 Area类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FssId
{
    class Area
    {
        int ar_id;

        public int Ar_id
        {
            get { return ar_id; }
            set { ar_id = value; }
        }
        string ar_name;

        public string Ar_name
        {
            get { return ar_name; }
            set { ar_name = value; }
        }
        int ar_uid;

        public int Ar_uid
        {
            get { return ar_uid; }
            set { ar_uid = value; }
        }
    }
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name ="constr" connectionString="server=PC201609230944\SQL2005;database=HeiMaBlog;user=sa;pwd=123456"/>
  </connectionStrings>
</configuration>

数据库

 

配置文件:

每个程序保存一些信息的文件,开发的时候,winfrom的名字叫app.config。

WebForm的web.config。

在winform程序被编译之后,这个文件会变成“程序名.config”。

在configuration节点里面添加一个connectionStrings节点,再里面添加一个add节点。

 

posted @ 2017-10-30 16:50  兽人松  阅读(163)  评论(0编辑  收藏  举报