zoukankan      html  css  js  c++  java
  • Sql Server 的DataReader 与 DataSet

    刚刚使用sql数据库,发现,竟然忘记了怎么用,

    》》DataReader 的原理是返回一个游标,Read的时候会通过与sql的链接读取游标所指向行的数据,返回给客户端,其优点是,不占用客户端内存,适用于取多条数据,缺点是不能断开与数据库的链接,而且只能顺序读取数据,不可回头。

    》》DataSet的原理是在内存中生成一个dataset,再以sqldataAdapter为桥梁,将查询到的数据fill到这个内存中的DataSet中,DataSet是由多个DataTable组成的。客户端通过Dataset中的DataTable获取查询到的数据,其优点是一次性取回所有要求的数据,并放置于内存中,使用这些数据的时候直接从客户端的内存中取出,可以随意的读取。不需要到sql的链接存在,而且还可以修改内存中的DataSet 修改完成后在通过SqlDataAdapter update到sql数据库中。缺点是将所得得数据放到内存中会占用客户端的内存,只适用于小数据量。

    》》SQL Server连接。

    1、sql的链接字符串,sql的链接字符串包含,a、sql服务器的地址和实例名Data Source=**;b、如果是附加到数据库的话要制定附件到数据库的mdf文件的地址AttachDbFilename="**";c、安全设置(登陆到数据库服务器);d、Connect Timeout 连接超时时间。

    2、sql连接字符串可以放到程序的配置文件中,在<configuration>的下层建立一个<connectionStrings> 在其下<add name=“Conn” connectionString="连接字符串".(可以添加多个连接字符串)

    3、读取配置文件中的连接字符串 ,首先要添加对System.Configuration的引用,在using System.Configuration。string constr=ConfigurationManager.ConnectionStrings["conn"].ConnectionString; 获取。

    》》DataReader的使用

    using(SqlConnection conn= new SqlConnection(constr))
    {
    conn.Open();
    using (SqlCommand command=conn.CreateCommand())
    {
    command.CommandText = "select * from [T_UserDb]";
    using (SqlDataReader read = command.ExecuteReader())
    {
    while (read.Read())
    {
    string username = read.GetString(read.GetOrdinal("UserName"));
    string password = read.GetString(read.GetOrdinal("Password"));

    }
    }
    }

    使用流程:

    a、建立一个新的SqlConnection;

    b、打开sqlconnection,创建一个基于新建的sqlconnection的sqlcommand,

    c、设置command的commandtype;command.CommandType= System.Data.CommandType.Text or StoredProcedure

    d、设置command的commandtext为要执行的sql语句。

    e、sqlDataReader reader=command.ExecuteReader() 执行sql语句并返回DataReader,返回DataReader的时候游标在第一行数据的上一行,DataReader.Readh后会移动到第一行,如果没有数据返回false,Read到组后一行后在执行Read 会将游标移动到最后一行的下一行,并返回一个false。

    》》DataSet的使用

    string constr= ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
    DataSet mydataset=new DataSet();
    using(SqlConnection conn= new SqlConnection(constr))
    {
    conn.Open();
    using (SqlCommand command=conn.CreateCommand())
    {
    command.CommandType= System.Data.CommandType.Text ;
    command.CommandText = "select * from [T_UserDb]";
    using (SqlDataAdapter adapter = new SqlDataAdapter())
    {
    adapter.SelectCommand = command;
    adapter.Fill(mydataset);
    }
    }
    }
    DataTable mytable = mydataset.Tables[0];
    foreach (DataRow mydatarow in mytable.Rows)
    {
    string username = mydatarow["UserName"].ToString();
    string id = mydatarow["ID"].ToString();
    string password = mydatarow["Password"].ToString();
    }

    使用流程:

    a、new一个dataset;DataSet mydataset=new DataSet();

    b、建立一个新的SqlConnection;

    c、打开sqlconnection,创建一个基于新建的sqlconnection的sqlcommand,

    d、设置command的commandtype;command.CommandType= System.Data.CommandType.Text or StoredProcedure

    e、设置command的commandtext为要执行的sql语句。

    f、new一个SqlDataAdapter,并设置SqlDataAdapter 的selectcommand为command。

    g、调用SqlDataAdapter 的fill 将查询到的数据填充到mydataset; adapter.Fill(mydataset,"mytable"); fill的时候可以指定表的名称,这样在取值的时候可以通过表名来获取datatable。
    h、这个时候可以释放所有的sqlconnection和command和dataAdapter

    i、读取dataset中的数据,首先要获取dataset中的datatable,方法为DataTable mytable = mydataset.Tables[0]或者DataTable mytable = mydataset.Tables["mytable"];接下来foreach mytable中的每一行,通过mydatarow["字段名"]获取数据。

  • 相关阅读:
    Docker私有仓库
    Swarm配置文件管理
    Docker Swarm高可用性
    Docker集群管理Swarm数据持久化
    Swarm使用原生的overlay网络
    Docker Swarm集群部署
    Docker管理工具-Swarm
    Docker多主机网络 OpenvSwitch
    Docker网络 Weave
    Docker Macvlan
  • 原文地址:https://www.cnblogs.com/cnbluerain/p/2140053.html
Copyright © 2011-2022 走看看