• 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=PC201609230944SQL2005;database=HeiMaBlog;user=sa;pwd=123456"/>
      </connectionStrings>
    </configuration>

    数据库

    配置文件:

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

    WebForm的web.config。

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

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

  • 相关阅读:
    Winform 打包,卸载程序制作获取ProductCode
    委托/事件的重写
    反序列化无法找到程序集
    Control.Invoke注意事项
    操作config文件
    MemoEdit自动滚动到结尾
    读取局域网内的共享文件
    命令行卸载程序
    获取执行程序的路径
    SCSF 系列:使用 Visualizer 监控 SCSF 运行状态
  • 原文地址:https://www.cnblogs.com/lisong-home/p/7755236.html
Copyright © 2020-2023  润新知