C#——《C#語言程序設計》實驗報告——數據庫編程——基於ADO.NET技術的數據庫操作DEMO

一、實驗目的

  1. 掌握ADO .NET數據離線與在線訪問模型;
  2. 掌握應用LINQ進行數據查詢;

二、實驗內容

  1. 基於ADO.NET技術進行數據操作

已提供一個控制檯程序的框架。附件中提供了各種格式的Northwind數據庫。

參考案例程序,連接上數據庫,進行各種操作,補全該程序。

一些可用的SQL語句:

select * from 客戶 where 城市='南京'//找到所有位於南京的客戶

select count(*) from 客戶 where 城市='南京'//統計南京客戶的數量

update 客戶 set 城市='天津' where 客戶ID='ALFKI'//更新客戶信息,若滿足條件,就將“城市”字段改爲天津

可自由選擇所查詢的數據庫表和參數。注意,SQL中字符串需加單引號。

    class Test
    {
        static string _mdbFile = "D:/Northwind.mdb";
        static OleDbConnection _connection;
        static OleDbDataAdapter _adapter;
        static DataSet _dataset;

        public static void Main(string[] argv)
        {
            while (true)
            {
                int index = 1;
                Console.WriteLine("=====Menu=====");
                Console.WriteLine(index++ + ". 連接數據庫");
                Console.WriteLine(index++ + ". 查詢數據行");
                Console.WriteLine(index++ + ". 數據統計");
                Console.WriteLine(index++ + ". 更新數據庫");
                Console.WriteLine(index++ + ". 數據庫離線查詢");
                Console.WriteLine(index++ + ". 離線LINQ查詢");
                Console.WriteLine(index++ + ". 斷開數據庫");
                Console.WriteLine(index++ + ". 退出");
                Console.WriteLine("=====End======");
                Console.Write("請選擇一個操作:");

                string input = Console.ReadLine();
                int choice;
                bool isDigit = int.TryParse(input, out choice);
                if (!isDigit || choice >= index || choice < 1)
                {
                    Console.WriteLine("錯誤選項");
                }

                if (choice == index - 1)
                    break;

                switch (choice)
                {
                    case 1:
                        ConnectToDB();
                        break;
                    case 2:
                        QueryWithReader();
                        break;
                    case 3:
                        QueryScalar();
                        break;
                    case 4:
                        UpdateOnLine();
                        break;
                    case 5:
                        QueryOffLine();
                        break;
                    case 6:
                        LINQQuery();
                        break;
                    case 7:
                        CloseDB();
                        break;
                }
                Console.WriteLine();
            }
        }

        public static bool IsConnected()
        {
            if (_connection == null || _connection.State != ConnectionState.Open)
            {
                Console.WriteLine("數據庫未連接");
                return false;
            }
            return true;
        }

        public static void ConnectToDB()
        {
            string connString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _mdbFile;
            _connection = new OleDbConnection(connString);
            //補全
        }

        public static void QueryWithReader()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            //補全
        }

        public static void QueryScalar()
        {
        }

        public static void UpdateOnLine()
        {
        }

        public static void QueryOffLine()
        {
        }

        public static void LINQQuery()
        {
        }

        public static void CloseDB()
        {
        }
    }

源代碼

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Homework12
{


    class Test
    {
        static string _mdbFile = "E:\\School Life\\University\\Study\\計算機\\程序語言\\C#\\第十三次課0529\\Northwind\\Northwind.mdb";
        static OleDbConnection _connection;
        static OleDbDataAdapter _adapter;
        static DataSet _dataset;

        public static void Main(string[] argv)
        {
            while (true)
            {
                int index = 1;
                Console.WriteLine("=====Menu=====");
                Console.WriteLine(index++ + ". 連接數據庫");
                Console.WriteLine(index++ + ". 查詢數據行");
                Console.WriteLine(index++ + ". 數據統計");
                Console.WriteLine(index++ + ". 更新數據庫");
                Console.WriteLine(index++ + ". 數據庫離線查詢");
                Console.WriteLine(index++ + ". 離線LINQ查詢");
                Console.WriteLine(index++ + ". 斷開數據庫");
                Console.WriteLine(index++ + ". 退出");
                Console.WriteLine("=====End======");
                Console.Write("請選擇一個操作:");

                string input = Console.ReadLine();
                int choice;
                bool isDigit = int.TryParse(input, out choice);
                if (!isDigit || choice >= index || choice < 1)
                {
                    Console.WriteLine("錯誤選項");
                }

                if (choice == index - 1)
                    break;

                switch (choice)
                {
                    case 1:
                        ConnectToDB();
                        break;
                    case 2:
                        QueryWithReader();
                        break;
                    case 3:
                        QueryScalar();
                        break;
                    case 4:
                        UpdateOnLine();
                        break;
                    case 5:
                        QueryOffLine();
                        break;
                    case 6:
                        LINQQuery();
                        break;
                    case 7:
                        CloseDB();
                        break;
                }
                Console.WriteLine();
            }
        }

        public static bool IsConnected()
        {
            if (_connection == null || _connection.State != ConnectionState.Open)
            {
                Console.WriteLine("數據庫未連接");
                return false;
            }
            return true;
        }

        public static void ConnectToDB()
        {
            string connString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _mdbFile;
            _connection = new OleDbConnection(connString);
            //補全
            try
            {
                _connection.Open();
                Console.WriteLine("數數據庫連接成功:" + _mdbFile + " is " + _connection.State);
            }
            catch(Exception e){
                Console.WriteLine(e.Message);
                _connection.Close();
            }
            finally {
                
            }

        }

        public static void QueryWithReader()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            //補全
            command.CommandText = "select * from 客戶 where 城市='南京'";
            OleDbDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Console.WriteLine(reader[0].ToString());
            }
            reader.Close();
        }

        public static void QueryScalar()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            command.CommandText = "select count(*) from 客戶 where 城市='南京'";
            int count = (int)command.ExecuteScalar();
            Console.WriteLine("記錄總數:"+count);
        }

        public static void UpdateOnLine()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            command.CommandText = "update 客戶 set 城市='天津' where 客戶ID='ALFKI'";
            int count = (int)command.ExecuteNonQuery();
            Console.WriteLine("更新 " + count + " 行");
        }

        public static void QueryOffLine()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            command.CommandText = "select * from 客戶";
            _dataset = new DataSet();
            DataTable dt1 = new DataTable("Scene");
            _dataset.Tables.Add(dt1);
            _adapter = new OleDbDataAdapter(command);
            _adapter.Fill(dt1);
            var query = from x in dt1.AsEnumerable()
                        select x;
            foreach (DataColumn column in dt1.Columns)
                Console.Write(column.ColumnName+"\t");
            Console.WriteLine();
            foreach (var row in query){
                foreach (DataColumn column in dt1.Columns)
                    Console.Write(row[column.ColumnName] + "\t");
                Console.WriteLine();
            }
        }

        public static void LINQQuery()
        {
            if (!IsConnected())
                return;

            var command = _connection.CreateCommand();
            command.CommandText = "select * from 客戶 where 城市='南京'";
            _dataset = new DataSet();
            DataTable dt1 = new DataTable("Scene");
            _dataset.Tables.Add(dt1);
            _adapter = new OleDbDataAdapter(command);
            _adapter.Fill(dt1);
            var query = from x in dt1.AsEnumerable()
                        where (string)x["城市"] == "南京"
                        select x;
            foreach (DataColumn column in dt1.Columns)
                Console.Write(column.ColumnName + "\t");
            Console.WriteLine();
            foreach (var row in query)
            {
                foreach (DataColumn column in dt1.Columns)
                    Console.Write(row[column.ColumnName] + "\t");
                Console.WriteLine();
            }
        }

        public static void CloseDB()
        {
            if (!IsConnected())
                return;

            _connection.Close();
            Console.WriteLine("數數據庫關閉成功:" + _mdbFile + " is " + _connection.State);
        }
    }
}

運行結果

三、實驗心得與體會

  1. 掌握ADO .NET數據離線與在線訪問模型;
  2. 掌握應用LINQ進行數據查詢;

參考文章

 https://blog.csdn.net/zac_sian/article/details/51161563

https://www.runoob.com/csharp/csharp-for-loop.html

https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datarow?view=netframework-4.8

https://docs.microsoft.com/zh-cn/dotnet/api/system.data.oledb.oledbdataadapter?view=dotnet-plat-ext-3.1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章