C# 使用數據讀取器

很久以前就借了一本《Beginning C# Databases From Novice to Professional》,最近閒來無事終於可以拜讀一下。讀來發現自己之前的數據庫操作是何等的粗鄙。今天 抽時間記錄下一些關於數據讀取器有關的內容。

在本書後面的數據集時提及“如果只想讀取數據和顯示數據,則只需使用數據讀取器”,“如果需要處理數據,然後更新數據庫,就需要使用數據集”

下面給出一個實例

using System;

using System.Data;

using System.Data.SqlClient;

namespace DataReader
{
    class Program
    {
        static void Main(string[] args)
        {
             string connString = @"Data Source=localhost;Initial Catalog=mydatabase; Integrated Security=SSPI";
            string sql = @"select * from mytable";
            SqlConnection conn = new SqlConnection(connString);
            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);

                //SqlDataReader類是抽象類,不能顯示實例化。必須執行SqlCommand的ExecuteReader方法獲得SqlDataReader實例
                SqlDataReader reader = cmd.ExecuteReader(); 

               //Read方法如果存在下一行就返回true,並向前移動遊標;如果沒有下一行,該方法就返回false
                while (reader.Read())
                {
                    Console.WriteLine("databack with {0} columes", reader[0]);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error occurred:" + e);
            }
            finally
            {
                conn.Close();
            }
        }
    }
}


Console.WriteLine("databack with {0} columes", reader[0]); 中使用了序數索引器從數據庫中檢索列數據。

同時可以使用列名索引器(優點:使用列名索引器可以屏蔽由於添加刪除列導致的列順序變化,而產生的異常)

reader["CompanyName"].Tostring().PadLeft(25);

reader["ContactName"].Tostring().PadLeft(20);


然後如果知道了返回值的類型 還可以使用類型訪問器

這個需要查表將數據庫中定義的類型對用.NET Framework中的類型訪問器


while(reader.Read())

{

Console.WriteLine("{0}\t{1}\t{2}\t{3}",reader.GetString(0).PadRight(30), reader.GetDecimal(1),reader.GetInt16(2),reader.GetBoolean(3));

}

類型訪問器方法都以Get開頭,用序數進行數據索引,是類型安全的


數據讀取器的元數據屬性和函數

函數或屬性名稱

說明

Depth

該屬性表示當前行的嵌套深度

FieldCount

該屬性表示結果集中的列數

GetDataTypeName

這個方法接收索引,返回含有列數據類型名稱的字符串

GetfieldType

這個方法接收索引,返回對象的.NET FrameWork 數據類型

GetName

這個方法接收索引,返回指定列的名稱

GetOrdinal

這個方法接收列名,返回列的索引


  Console.WriteLine("'{0|' is at index{1}" +
                        "and its type is:{2}",
                        reader.GetName(0),
                        reader.GetOrdinal("contactname"),
                        reader.GetFieldType(0));

獲取表的數據

DataTable schema=reader.GetSchemaTable();


使用拼接的方式 使用數據讀取器處理多個結果集

string sql1 = @“select companyname,contactname from customers where companyname like 'A%'";

string sql2 =@"select firstname,lastname from employees";

string sql=sql1+sql2;



SqlDataReader reader= cmd.executeReader();

do

{

while(reader.Read())

{

Console.WriteLine("".PadLeft(60,'='));

}

}

while(reader.NextResult());


發佈了17 篇原創文章 · 獲贊 14 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章