今天总结了一下ADO.NET编程中DataReader和dataSet两个比较重要的对象的使用,完成了combobox,listbox,以及fpSpread动态添加数据的测试,对使用sqlCommand来添加SQL语句参数也有了一定的认识,希望分朋友们分享一下经验,当然也有不足,工作不忙的时候再好好修改~

1.首先MS SQL Server 2012 Management在本机创建的数据库test,另外两个表,部门表和员工表

2.winform编写,form1添加4个控件:button2,listBox1,comboBox1,fpSpread_yuangong然后进行编程

<没用定义新的类,有兴趣的朋友可以定义DBconnection这样的类,DB连接,字段等属性封装进去>最不能容忍的是公司限网连截图都不能上传,有时间再编辑

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.SqlClient;
using FarPoint.Win.Spread; namespace WindowsFormsApp_DB
{
public partial class Form1 : Form
{ public static string dbconnstring = "server=Q1502LP0003\\SQLEXPRESS;database=test;uid=ammy;pwd=ammy714926;";
//SqlConnection dbc = new SqlConnection("server=Q1502LP0003\\SQLEXPRESS;database=test;uid=ammy;pwd=ammy714926;"); public SqlDbType sqlDbType { get; set; } public Form1()
{
InitializeComponent();
} private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();//每次清空
SqlConnection dbc = new SqlConnection(dbconnstring);
string sQuery = "";
sQuery = "SELECT ";
sQuery = sQuery + "* ";
sQuery = sQuery + "FROM test.dbo.部门表 WITH(NOLOCK)";
SqlCommand dbm = new SqlCommand(sQuery, dbc);
dbc.Open();//连接到数据源
SqlDataReader dbReader = dbm.ExecuteReader(CommandBehavior.CloseConnection);
while(dbReader.Read())
{
//必须和DB表列名一致,或者用索引
listBox1.Items.Add("部门编号是:"+dbReader["部门编号"].ToString().Trim());
listBox1.Items.Add("部门名称是:" + dbReader["部门名称"].ToString().Trim());
listBox1.Items.Add("部门职责是:" + dbReader["部门职责"].ToString().Trim());
listBox1.Items.Add("-----------------------------"); }
dbReader.Close();
dbc.Dispose();
dbc.Close();//关闭数据源连接,因为SqlDataReader始终占有SqlConnection,需要在用完关闭
dbc = null;
} private void Form1_Load(object sender, EventArgs e)
{
initial(fpSpread_yuangong);
setcombox(comboBox1);
//属性设计器里:this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
} private void initial(FpSpread spread)
{
spread.Sheets[].ColumnCount = ;
spread.Sheets[].ColumnHeader.Rows[].Height = ;
spread.Sheets[].ColumnHeader.Cells[, ].Text = "员工编号";
spread.Sheets[].ColumnHeader.Cells[, ].Text = "员工姓名";
spread.Sheets[].ColumnHeader.Cells[, ].Text = "联系电话";
spread.Sheets[].ColumnHeader.Cells[, ].Text = "email";
spread.Sheets[].Columns[].Width = ;
spread.Sheets[].Columns[].Width = ;
spread.Sheets[].Columns[].Width = ;
spread.Sheets[].Columns[].Width = ; } private void setcombox(ComboBox comboBox)
{
SqlConnection dbc = new SqlConnection(dbconnstring);
string sQuery1 = "";
sQuery1 = "select * from test.dbo.部门表";
//sQuery1 = "select top 2 * from test.dbo.部门表";由此可见加载到dataset的数据不是整张表,而是由select决定的数据集
SqlCommand dbm1 = new SqlCommand(sQuery1,dbc);
SqlDataAdapter adapter = new SqlDataAdapter();
dbc.Open();
adapter.SelectCommand = dbm1;
DataSet ds = new DataSet();
DataTable bumen = ds.Tables.Add("内存部门表");
adapter.Fill(bumen); dbc.Dispose();
dbc.Close();//关闭数据源连接
dbc = null; DataRow dr = bumen.NewRow();
dr["部门编号"] = "";
dr["部门名称"] = "全体";
bumen.Rows.InsertAt(dr, ); comboBox.ValueMember = "部门编号";
comboBox.DisplayMember = "部门名称";
comboBox.DataSource = bumen; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
searchStuff();
} private void searchStuff()
{
string paraziduan = comboBox1.SelectedValue.ToString();
string sQuery2 = "";
if (paraziduan == "")//这里不是paraziduan == "全体"!这是显示的数据!所以调试了好久才发现!
{
sQuery2 = "select * from test.dbo.员工通讯录表";
}
else
{
sQuery2 = sQuery2 + "select * from test.dbo.员工通讯录表 where 所属部门 = @dbpara";
//sQuery2 = sQuery2 + "select * from test.dbo.员工通讯录表where 所属部门"+para+"";这样写的话总是错,这种格式不知道错在哪里
} SqlConnection dbc = new SqlConnection(dbconnstring);
if (dbc.State.Equals(ConnectionState.Closed))
{
dbc.Open();
} //以下是利用SqlCommand传参数的方法,很好用!
SqlCommand dbm2 = new SqlCommand(sQuery2,dbc);
dbm2.CommandText = sQuery2;
SqlParameter para = new SqlParameter("@dbpara", SqlDbType.VarChar, );//生成一个名字为@dbpara的参数,字段数据类型和长度要和DB表字段设置一致
para.Value = paraziduan;//给参数赋值
dbm2.Parameters.Add(para); SqlDataAdapter adapter2 = new SqlDataAdapter();
adapter2.SelectCommand = dbm2;
DataSet ds2 = new DataSet();
DataTable yuangong = ds2.Tables.Add("员工按部门选择表");
adapter2.Fill(yuangong); dbc.Dispose();
dbc.Close();//关闭数据源连接
dbc = null; fpSpread_yuangong.DataSource = yuangong;
for (int i = ; i < yuangong.Rows.Count; i++)
{
fpSpread_yuangong.Sheets[].ColumnCount = ;//如果注释这行,奇怪的是会把dataTable的所以字段无差别全部显示?
fpSpread_yuangong.Sheets[].Cells[i, ].Text = yuangong.Rows[i]["员工编号"].ToString();
fpSpread_yuangong.Sheets[].Cells[i, ].Text = yuangong.Rows[i]["姓名"].ToString();
fpSpread_yuangong.Sheets[].Cells[i, ].Text = yuangong.Rows[i]["电话号码"].ToString();
//搞不清电子邮件一列为什么显示不出来?
fpSpread_yuangong.Sheets[].Cells[i, ].Text = yuangong.Rows[i]["电子邮件"].ToString().Trim();
} } }
}

效果图:

是今天业余学习的小结。对于DataReader和dataSet的区别,网上一搜就是一大堆,关键还是要理解和运用!

加油!

ADO.NET_包括DataReader和dataSet的使用的更多相关文章

  1. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  2. Data Base sqlServer DataReader与DataSet的区别

    sqlServer   DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...

  3. DataReader 和 DataSet 的区别

    摘自:http://www.cnblogs.com/zhjjNo1/archive/2009/08/26/1554420.html 第一种解释 DataReader和DataSet最大的区别在于,Da ...

  4. DataReader和DataSet的区别以及使用

    DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示:   DataReader DataSet 数 ...

  5. DataReader和DataSet区别

    可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条: 1.       DataReader是数据管理提供者类,而DataSet是一 ...

  6. sqlServer DataReader与DataSet的区别

    sqlServer   DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...

  7. datareader 和dataset 区别

    ADO.NET2.0提供了两个用于检索关系数据的对象:DataSet和DataReader.并且这两个对象都可以将检索的关系数据存储在内存中.在软件开发过程中经常用到这两个控件,由于这两个控件在使用和 ...

  8. 30、ADO.NET、事务、DataSet

    ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库.通常数据源是数据库,但也可以是文本文件.Excel表格.XML文件. 说白了就是使用.net操作数据库的一套类库. ADO.NE ...

  9. C#对SQL数据库操作类简介:Connection、Command、DataReader、DataSet、DataAdapter

    在说C#操作数据库之前需要先说下ADO.NET.ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据.之所以使 ...

随机推荐

  1. DataTable 更改在有数据列的类型方法

    原文:DataTable 更改在有数据列的类型方法 /// <summary> /// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改 ...

  2. .NET Core2.1项目在Linux上使用验证码报Unable to load shared library 'gdiplus' or one of its dependencies

    -- ::, 线程ID:[] 日志级别:ERROR 出错类:WebApp.HttpGlobalExceptionFilter property:[(null)] - 错误描述:System.TypeI ...

  3. 关于Eurekalog解决不能发邮件的问题

    最近无意中发现在盒子论坛中有人回答了本文的问题,最后在Eurekalog的安装目录中的ExceptionLog.pas找到了多发送的Rest命令的地方,现传上来,有需要的朋友下载下面的文件. 因为16 ...

  4. Qt给应用程序添加版本信息(对rc文件的设置,可利用QT内置变量)

    作者:daodaoliang 时间:2016年7月11日16:12:09 版本:V 0.0.4 邮箱:daodaoliang@yeah.net 0. 环境说明 系统环境: win10 64位 Qt环境 ...

  5. [書訊]《.NET 依賴注入》 (2014-12-08 更新)

    书 名:.NET 依赖注入 页 数:235 格 式:PDF.EPUB.MOBI难易度:中阶至进阶出版日期:2014 年 12 月 8 日ISBN:9789574320684 简介 本书内容是关于 .N ...

  6. qt开发的小软件,可以递归转换文件编码(qt为了防止内存泄露所做的保护机制)

    应用场景 当你下载别人的源码的时候,而别人的源码跟你自己电脑里面的编码不一致的情况下将会出现乱码,但是如果要一个个转换编码的话那么那样所需要花的时间太多,所以就有必要写一个软件递归遍历项目下面所有的文 ...

  7. iOS11中iOS处理GIF图片的方式

      GIF 五部走如下 :   1 从相册中取出GIF图的Data 2 通过腾讯的IM发送Gif图 3 展示GIF图 4 GIF图URL缓存机制 5 将展示的GIF图存到相册中     一  从相册中 ...

  8. js中prototype与__proto__区别

    proto(隐式原型)与prototype(显式原型) 显式原型 explicit prototype property:每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数 ...

  9. 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

    一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...

  10. 惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!

    说明 接着上次手撕面试题ThreadLocal!!!面试官一听,哎呦不错哦!本文将继续上文的话题,来聊聊FastThreadLocal,目前关于FastThreadLocal的很多文章都有点老有点过时 ...