DataTable && SqlDataReader帮助理解小程序
// 2015/07/08
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace DataTapleSample
{
class Program
{
static void Main(string[] args)
{
// 通用的专门用来保存数据库中数据的类型
DataTable table = new DataTable(); // 在DataTable 中保存数据之前,必须先定义结构
DataColumn stuid =
//new DataColumn("StuId",System.Type.GetType("System.Int32"));
new DataColumn("StuId",typeof(int));//简写方式和前者等价
DataColumn stuname = new DataColumn("stuName",typeof(string));
DataColumn stuaddress = new DataColumn("stuaddress",typeof(string)); // 创建表的结构
table.Columns.Add(stuid);
table.Columns.Add(stuname);
table.Columns.Add(stuaddress); // 表的约束
// 主键约束
table.PrimaryKey = new DataColumn[]{stuid}; // 非空约束
// stuaddress.AllowDBNull = false;
// 唯一约束:stuname.Unique; // 如何在 DataTable 中保存数据
// DataRow 表示保存在 DataTable 中的一行数据
DataRow row = table.NewRow(); // 使用 NewRow 方法创建的行,结构与表是相同的(如下三种方法,建议第一种)
// row[stuid] = 1;
// row[1] = "XXXX";
// row[stuaddress] = "XXXX";
row[stuid] = 7;
row[stuname] = "XX";
row[stuaddress] = "XXX"; // 现在加入到 DataTable 中
table.Rows.Add(row); // 访问保存在 DataTable 中的数据
foreach (DataRow r in table.Rows)
{
Console.WriteLine("stuid:{0},stuName:{1},stuaddress:{2}",r[0],r[1],r[2]);
}
Console.ReadKey();
}
}
}
//////////////////////////////////////////////////////////////
// next // 2015/07/08
// DataTable && SqlDataReader
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace StuDataTable
{
class Program
{
static void Main(string[] args)
{
// 保存在 DataTable 中
DataTable table = new DataTable(); string connectionString = "server=.;database=BookSample;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = "select ID,StuName,Phone from students";
SqlCommand cmd = new SqlCommand(sql,connection); connection.Open(); using (SqlDataReader reader = cmd.ExecuteReader())
{
// 根据查询结果的结构来创建对应的 DataTable
int columnCount = reader.FieldCount; // 查询结果的列数 // 逐列创建
for (int i = 0; i < columnCount; i++)
{
DataColumn column = new DataColumn(
reader.GetName(i),
reader.GetFieldType(i)
);
table.Columns.Add(column);
} // 逐行从数据库中读取数据
while (reader.Read())
{
DataRow row = table.NewRow(); for (int i = 0; i < columnCount; i++)
{
row[i] = reader[i];
}
table.Rows.Add(row);
}
} } // 现在数据库中的数据已经保存到内存中特殊的集合中
foreach (DataRow row in table.Rows)
{
// 将 ID 读取出来
Console.WriteLine(row["ID"]);
}
Console.ReadKey();
}
}
} /*
相关阅读:
https://msdn.microsoft.com/zh-cn/library/system.data.datatable.aspx
https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader.aspx */
DataTable && SqlDataReader帮助理解小程序的更多相关文章
- 微信小程序开发:学习笔记[7]——理解小程序的宿主环境
微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器
- 微信小程序开发——以简单易懂的浏览器页面栈理解小程序的页面路由
前言: 对于小程序的页面路由,如果没有一定开发经验的话,理解起来还是会有些困难的.哪怕是有一定小程序开发经验的开发者,能够完全理解掌握的恐怕也不多. 这里就以另外一种方式来详细的介绍小程序的页面栈及路 ...
- 小程序学习-理解小程序中响应式单位rpx
微信小程序的官方文档用rpx来做响应式布局单位!那什么是rpx,应该如何设置呢?今天我们就来好好了解一下. [像素]:它不是自然界的物理长度,指基本原色素及其灰度的基本编码. [物理像素]:它是显示器 ...
- DataAdapter&&DataSet 帮助理解小程序
// 2105/07/08 // DataAdapter&&DataSet using System; using System.Collections.Generic; using ...
- 微信小程序简单入门理解
简单的小程序示例结构: (一):理解小程序结构app.js,app.json,app.wxss ①app.js,app.json是小程序结构必要的部分,app.wxss可选择 ②app.js用于创建小 ...
- 教你理解微信小程序的生命周期和运行原理
转自:http://blog.csdn.net/tsr106/article/details/53052879 写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君 ...
- 理解微信小程序的生命周期和运行原理
写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...
- 理解微信小程序的双线程模型
有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...
- TODO:即将开发的第一个小程序
TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...
随机推荐
- FZU 1397 保送
网络流入门题. 源点到每一个学生连一条边,容量为1 每个学校到汇点连一条边,容量为L 符合要求的学生和学校之间连边,容量为1. 从源点到汇点的最大流就是答案. #include<cstdio&g ...
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- java web基础 --- URL重定向Filter
java web基础 --- URL重定向Filter httpRequest.getRequestDispatcher("/helloWorld").forward(httpRe ...
- java线程 — 创建和启动线程
创建和启动线程,传统有两种方式: 方式1:继承Thread类: 方式2:实现Runnable接口: 线程类(java.lang.Thread):Thread类和Thread的子类才能称之为线程类.阅读 ...
- 【转】Linux正则表达式使用指南
正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选 ...
- leetcode--011 copy list with random pointer
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3UAAABjCAIAAACzC75sAAAMTElEQVR4nO3cyYHivBYG0D8n0nIojo ...
- cocos2d动作讲解
从本章开始,我们开始讲解cocos2d-x库的动作(Action).游戏的世界是一个动态的世界:无论是主角精灵还是NPC精灵都处于不断的运动当中,甚至是背景中漂流的树叶,随风而动的小草.这些明显的或者 ...
- UE4上传图片到服务器
客户端代码: void AHttpTestCharacter::MyHttpCall(FString Url){ // TexturePath contains the local file full ...
- UVa 11495 - Bubbles and Buckets
题目大意:给一个有n个数的序列,通过交换相邻的逆序数使这个序列最终有序,求需要交换的次数. 本来可以用冒泡排序解决,但是n达到105,用冒泡排序会超时,用O(nlogn)的归并排序可以达到要求.< ...
- 实时 Django 终于来了 —— Django Channels 入门指南
Reference: http://www.oschina.net/translate/in_deep_with_django_channels_the_future_of_real_time_app ...