• sqlconnection,sqlcommand,sqldataadapter,sqldatareader,dataset的关系详解


    一,首先,简单打个比喻,

    以老板要小二去仓库取东西为例,在这里:

    sqlconnection就是去东西要经过的路;

    sqlcommand便是老板的命令;

    sqldatareader是小二选择去仓库的交通工具,这里可以比作是摩托车,那么sqldatareader便是大卡车;

    dataset便是你取回数据后,自己的临时仓库,你可以把取来的数据放在这个仓库里!

    二、用户说!

    1、用户说,要连接数据库,于是就有了sqlconnection (数据库连接,配置连接字符串等,用户名密码之类)

    2、用户说,要执行sql语句。于是就有了sqlcommand, 直接翻译成sql命令。每个sqlcommand都有commandtext跟parameters 文本跟参数。填写好这个命令,然后execute去执行。当然,要确保连接是open的才能执行。没连接啥都干不了。

    3、用户认为要有办法读取返回结果,于是便有了datareader.可以一条一条的读取(read)直到最后一条。

    4、用户认为,把执行的结果找个地方存起来是好的。于是就有了dataset。这个东西很完美,基本上能存各种数据跟关系,比datareader方便很多。里面有一个一个的dataview跟datatable.针对你的查询结果,当然,datatable又可以从datarow一个一个的循环取得

    5、上帝觉得上述步骤(3和4)太复杂了 -_-!
    于是便有了SqlDataAdapter (翻译为SQL数据适配器,适配器模式) 它来封装简化了上述步骤。你只要new出来一个sqldataadapter,给他填上语句,直接fill到dataset就行了。 这样你什么都有了,只需要两步!

    6、微软觉得,可视化的东西是用户喜欢的
    于是有了一个一个的SqlAdapter控件,DataSet控件,GridView控件....你可以直接拖到你的窗口(WinForm)或者页面(Asp.Net Web Application等)设置几个属性,绑定即可。一行代码都不用写。以至于普通网管跟文员都能成为潜在用户。(虽然这种方式被“专业程序员”所不齿)

    7建议:
    如果喜欢效率的,用command+datareader自己处理(要小心别弄得更差哦)
    如果喜欢方便的,就大量的使用Adapter+DataSet吧。毕竟绑定太节约时间了
    如果就想显示个数据而已...拖吧...反正你就是想给隔壁办公室显示个报表。

    示例:

    this.dataGridView3.Refresh();
    this.dataGridView3.Update();
    this.dataGridView3.EndEdit();
    string datestr = dateTimePicker1.Value.ToString("yyyy-MM-dd");
    string str = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
    SqlConnection conn = new SqlConnection(str);
    conn.Open();

    SqlCommand cmd = new SqlCommand("SELECT Row_Number() over (order by ApprDate asc) as RowId,Id FROM DB_Table a where a.Date>='" + datestr + "' ) order by a.Date desc", conn);
    SqlDataAdapter dpt = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    dpt.Fill(ds);
    System.Data.DataTable dtb = ds.Tables[0];
    dataGridView3.DataSource = dtb;
    this.dataGridView3.AutoGenerateColumns = false;
    this.dataGridView3.Columns["RowId"].DataPropertyName = dtb.Columns["RowId"].ToString();
    this.dataGridView3.Columns["Id"].DataPropertyName = dtb.Columns["Id"].ToString();
    this.dataGridView3.Columns["SubContractCode"].DataPropertyName = dtb.Columns["SubContractCode"].ToString();

    conn.Close();

  • 相关阅读:
    深入理解Linux修改hostname
    Linux开发环境必备十大开发工具
    管理员必备的几个Linux系统监控工具
    Solaris&&QNX® Neutrino®&&OpenVMS&&FreeBSD&&AIX
    ansible来了
    Cobbler系统安装备用链接
    Web安全
    在Eclipse/STS中使用EclEmma进行覆盖率检查
    C#中使用扩展方法
    Winform中Textbox的使用
  • 原文地址:https://www.cnblogs.com/tuxer/p/15892641.html
Copyright © 2020-2023  润新知