DataReader的用法程序简析

// 2015/07/05
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace DataReaderSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 集合,强类型的集合
            System.Collections.Generic.List<StudentModel> list = new List<StudentModel>();

            string connectionString = "server=.;database=BookSample;uid=LJK;pwd=123456";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sql = "select ID,StuName ,phone from students";
                SqlCommand cmd = new SqlCommand(sql,connection);

                // 通过数据库中的游标来辅助查询结果
                SqlDataReader reader = cmd.ExecuteReader();

                // DataReader 通过 Read 方法来读数据库中的记录
                while (reader.Read())
                {
                    Console.WriteLine("成功读取了一条记录");
                    // 读取的数据保存在 DataReader 对象内
                    int stuId = reader.GetInt32(0);
                    string stuName = reader.GetString(1);
                    string Phone = reader.GetString(2);

                    //上面的程序还可以用下面的代码代替(第二种方法)
                    //这种方法得出的是object类型,所以要强制转换一下
                    //int stuId = (int)reader[0];(值类型)
                    //string stuName = reader[1] as string;(引用类型)
                    //string Phone = reader[2];

                    //另外一种方式,下标为字段名,即使select语句修改也无影响
                    //string stuName = reader["StuName"] as string;(引用类型)

                    // 将读取的数据表示为对象实例
                    StudentModel model = new StudentModel();
                    model.StuID = stuId;
                    model.Stuname = stuName;
                    model.phone = Phone;

                    list.Add(model);

                    // 输出字段
                    // Console.WriteLine("StuId:{0}  StuName = {1} Phone = {2}",stuId,stuName,Phone);
                    // Console.WriteLine("StuId:{0}  StuName = {1} ", stuId, stuName);
                }
                // 游标也必须关闭
                reader.Dispose();
            }
            // 当读取完成的时候,我们得到一个集合,其中包含若干个的对象实例
            // 这些对象实例的数据来自数据库

            foreach (StudentModel model in list)
            {
                Console.WriteLine("{0}   {1}   {2}",model.StuID,model.Stuname,model.phone);
            }
            Console.ReadKey();
        }
    }
}
/*
数据库中的数据是 null,与.NET下的null不一致
数据库中的null在.NET环境下,专门使用一个特殊的类型来表示
    System.DBNull.Value
可用如下方法解决:
    string region = null;
    if(!reader.IsDBNull(3))
    {
       region = reader.GetString(3);
    }
//假如为整形方法如下:
可空类型,只能用于值类型
int? reportsTo -= null;
//对于可控类型来说,现在也有两个状态
//reportsTo.HasValue
//reportsTo.Value

if(!reader.IsDBNull(4))
{
    reportsTo = reader.GetInt32(4);
}
 */

//另一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataReaderSample
{
    public class StudentModel
    {
        private int stuId;
        public int StuID
        {
            get { return stuId;}
            set { stuId = value;}
        }
        public string Stuname { set; get; }
        public string phone { set; get; }

    }
}

//仅仅读取第一行第一列的值方法如下
// 2015/07/05
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace DataReaderSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "server=.;database=BookSample;uid=LJK;pwd=123456";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sql = "select ID,StuName ,phone from students";
                SqlCommand cmd = new SqlCommand(sql, connection);

                //仅仅读取第一行第一列的值
                object obj = cmd.ExecuteScalar();
                //如果一条数据都没有读到,那么返回null
                if (obj != null)
                {
                    int id = (int)obj;
                    Console.WriteLine("obj = {0}", id);
                }
                else
                {
                    Console.WriteLine("没有读到数据!");
                }
                // 通过数据库中的游标来辅助查询结果
                //SqlDataReader reader = cmd.ExecuteReader();

                // DataReader 通过 Read 方法来读数据库中的记录
                //if (reader.Read())
                //{
                //    int stuid = reader.GetInt32(0);
                //    Console.WriteLine(stuid);
                //}
                //reader.Dispose();
            }

            Console.ReadKey();
        }
    }
}

  

时间: 2025-01-05 22:56:12

DataReader的用法程序简析的相关文章

JAVA 编程 入门程序简析

//filename: HelloWorld.java public class HelloWorld {          public static int data = 100;          public static void main(String[] args) {                  System.out.println("Hello Java world!");                  System.out.println(data);  

最简单的基于FFMPEG的转码程序分析 +ffmpga代码简析(转 +总结)

模块:  libavcodec    - 编码解码器         libavdevice   - 输入输出设备的支持         libavfilter   - 视音频滤镜支持         libavformat   - 视音频等格式的解析         libavutil     - 工具库         libpostproc   - 后期效果处理         libswscale    - 图像颜色.尺寸转换 1. ffmpga代码简析 1.1 av_log() av_

GLib库安装与简析

GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库, 它提供C语言的常用的数据结构的定义.相关的处理函数,有趣而实用的宏, 可移植的封装和一些运行时机能,如事件循环.线程.动态调用.对象系统等的API. 它能够在类UNIX的操作系统平台(如LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行. 一.GLib在CentOS上的安装 检查系统当前的版本 # rpm -qi glibc Name        : glibc

JUC锁简析(基于源码的详解后续会陆续发出)

张图说明下要分享的内容: 01. Lock接口 JUC包中的 Lock 接口支持那些语义不同(重入.公平等)的锁规则.所谓语义不同,是指锁可是有"公平机制的锁"."非公平机制的锁"."可重入的锁"等等. "公平机制"是指"不同线程获取锁的机制是公平的", 而"非公平机制"则是指"不同线程获取锁的机制是非公平的","可重入的锁"是指同一个锁能够被一个

web应用构架LAMT及tomcat负载简析

Httpd    (mod_jk.so) workers.properties文件 uriworkermap.properties文件 <--AJP1.3--> Tomcat  --> jdk 大致流程:apache服务器通过mod_jk.so 模块处理jsp文件的动态请求.通过tomcat worker等待执行servlet/JSP的tomcat实例.使用 AJP1.3协议与tomcat通信.tomcat有借助jdk解析. 负载就是 多台tomcat.共同解析apache发送的jsp请

JDK源码简析--java.lang包中的基础类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下得rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 在本节中,简析java.lang包所包

Java Annotation 及几个常用开源项目注解原理简析

PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示例 Override Annotation Java 1 2 3 @Override public void onCreate(Bundle savedInstanceState); Retrofit Annotation Java 1 2 3 @GET("/users/{username}&quo

.NET设计模式简析

首先,是设计模式的分类,我们知道,常用的设计模式共23种.但总体来说,设计模式氛围三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单列模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模版方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.转改模式.访问者模式.终结者模式.解释器模式. 另外还有并发型模式和线程池模式等. 介绍了分类,下面简单说下设计模式的六大原则

Android WebView远程代码执行漏洞简析

0x00 本文参考Android WebView 远程代码执行漏洞简析.代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo.下面我们分析代码. 0x01 首先列出项目工程目录: MainActivity.java的代码如下: public class MainActivity extends Activity { private WebView webView; private Uri mUr