1. 程式人生 > >基於C#的Access資料庫的介面登陸_初體驗資料庫

基於C#的Access資料庫的介面登陸_初體驗資料庫

在學習C#一小段時間後,網上逛發現對於C#這類介面開發,如果要做一個好一點的應用,不用資料庫基本上不可能了。以前懶得學,都是用檔案方式儲存,然後再程式初始化的時候讀出,並沾沾自喜的說,其實這樣甚至在不用程式的時候也能修改。但是後來發現,不可控制的隱藏字元深深的傷害。今天下定決心學習下資料庫,從Access開始。畢竟這是最早過的NCRE所“推薦”的嘛。

首先呢,是安裝Access,網上很容易下到,我用的是2010,跟word保持一致。

安裝完後,新建了一個“資料庫”,名字叫做user.accdb,並且裡邊的資料表叫做user,欄位有ID(自帶)、UserName、Password三個(後來因為這個該死的user表的起名,折騰一陣)。

根據baidu頭條,瞭解到資料庫編寫在完成以上準備工作以後,需要做“connect”工作。

於是寫下了

           OleDbCommand cmd;
            //access資料庫連線語句
            string oleDBString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + accdb_path;
            //建立連線物件
            OleDbConnection conn = new OleDbConnection(oleDBString);
            conn.Open();
當然,為了能夠確保程式碼能夠重用,所以果斷封裝在了一個方法當中,成了下邊的樣子……
        public OleDbCommand accdbConnect(string strSql, string accdb_path)
        {
            OleDbCommand cmd;
            //access資料庫連線語句
            string oleDBString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + accdb_path;
            //建立連線物件
            OleDbConnection conn = new OleDbConnection(oleDBString);
            conn.Open();
            //建立命令物件
            cmd = new OleDbCommand(strSql, conn);
            return cmd;
        }
幸好我用的是絕對路徑,所以可能出現的相對路徑錯誤並沒有出現,而且在form_load()當中,我還寫下了判斷該資料庫是否存在:
            if (!File.Exists(str_tempFile))
            {//查詢選擇的檔案是否存在
                MessageBox.Show(str_tempFile + "資料庫檔案不存在或路徑不正確。\n請確認檔案存在後重啟程式", "找不到檔案", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
當然啦,這些工作本來應該是try-catch的工作,不過作為以C語言為主業的小猿來說,還是習慣自己這樣判斷。大蝦勿噴~

這裡開始最煩人的了,要寫出查詢語句。這裡可以發現,其實所謂的資料庫操作,都是製作一個字串,內容是對資料庫操作的一個命令列字串,然後通過給cmd賦值來傳送進去。所以這時候要想在資料庫檢索和匹配使用者名稱密碼就要用到資料庫語法,然後製作命令列字串,傳參進去。經過N小時查詢,終於找到了我需要的:

 //Access data base grammar about select:
            //(1)select * from 表名
            //(2)select 欄位1,欄位2,欄位3.... from 表名
            //(3)select * from 表名 where 條件
            //(4)select 欄位1,欄位2,欄位3.... from 表名 where 條件
            //(5)select top 5 欄位 from 表名(顯示某欄位前幾項)
            //(6)select distinct 欄位 from 表名(不重複顯示欄位)
            //(7)select * from 表名 where 年齡 between 20 and 30(在...之間)
            string str_sql_cmdSearch = "SELECT UserName,Password FROM [User] where UserName='" + temp_Name + "' and Password='" + temp_Password +"'";
為了方便以後維護,直接註釋在這裡,方便看。當然啦,沒有用summary括起來,等熟悉以後再說啊。

這樣基本就明確了。當然這裡需要注意的是使用者名稱和密碼的值,還要用單引號括起來,這個語法一開始小猿沒有注意到,直接報錯FROM語法不對,著實惱火半天,以為關鍵字大小寫問題,怎麼改都不對,最後反過頭來看baidu 的報錯說明,才知道!同時發現,user居然是關鍵字!!好吧,推倒重來,為了減少程式碼修改工作量,就將user首字母大寫好了。於是完成了……

        private void btn_Login_Click(object sender, EventArgs e)
        {
            string str_tempFile = "C:\\Users....Debug\\User.accdb";
            string temp_Name = txt_UserName.Text;
            string temp_Password = txt_Pswd.Text;
            bool Flag_Login = false;

            //Access data base grammar about select:
            //(1)select * from 表名
            //(2)select 欄位1,欄位2,欄位3.... from 表名
            //(3)select * from 表名 where 條件
            //(4)select 欄位1,欄位2,欄位3.... from 表名 where 條件
            //(5)select top 5 欄位 from 表名(顯示某欄位前幾項)
            //(6)select distinct 欄位 from 表名(不重複顯示欄位)
            //(7)select * from 表名 where 年齡 between 20 and 30(在...之間)
            string str_sql_cmdSearch = "SELECT UserName,Password FROM [User] where UserName='" + temp_Name + "' and Password='" + temp_Password +"'";

            try
            {
                OleDbCommand accdb_UserLogin_Cmd = accdbConnect(str_sql_cmdSearch, str_tempFile);

                OleDbDataReader accdb_UserLogin_reader =accdb_UserLogin_Cmd.ExecuteReader();

                if (accdb_UserLogin_reader.Read())
                {
                    Flag_Login = true;
                }
                else 
                {
                    MessageBox.Show("使用者名稱或密碼錯誤!", "登入失敗", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            catch (ArgumentException ex_cmd)
            {
                MessageBox.Show(ex_cmd.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }



            if (Flag_Login)
            {
                frm_EnDeCrypt EnDeCrypt = new frm_EnDeCrypt();
                EnDeCrypt.Show();
            }
            else
            {
                MessageBox.Show("使用者名稱或密碼錯誤", "禁止登陸", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            Flag_Login = false;
        }

首次學習資料庫任務完成!

相關推薦

基於C#的Access資料庫介面登陸_體驗資料庫

在學習C#一小段時間後,網上逛發現對於C#這類介面開發,如果要做一個好一點的應用,不用資料庫基本上不可能了。以前懶得學,都是用檔案方式儲存,然後再程式初始化的時候讀出,並沾沾自喜的說,其實這樣甚至在不用程式的時候也能修改。但是後來發現,不可控制的隱藏字元深深的傷害。今天下定

基於c# 類、介面、結構的聯絡與區別詳解

本篇文章是對c#中類與介面以及結構的聯絡與區別進行了詳細的分析介紹,需要的朋友參考下 一.C#類與結構的差別1. 值型別與引用型別結構是值型別:值型別在堆疊上分配地址,所有的基型別都是結構型別,例如:int 對應System.int32 結構,string 對應 sy

記一次資料庫分表的體驗

業務前景 由於小編所在的公司是傳統型公司,而業務對接的確實像螞蟻貨運險這樣的大業務,從2017年中旬對接到公司的業務資料量大約一天150W左右資料,而去年的雙十一最高峰值則達到2000W一天的資料量!公司所入的資料量全部存在10多張不同業務的表中,而中途資料庫已經告警過幾次,顯然這樣

Java高階特性1_流庫_體驗

# Java高階特性流庫_初體驗 > 面對結果程式設計 在程式設計裡, 有兩種程式設計方式, 一種是面對過程程式設計, 一種是面對結果程式設計. 兩者區別如下 面向過程程式設計 ![面向過程程式設計](https://img2020.cnblogs.com/blog/1969243/202010

C語言訪問INFORMIX資料庫介面實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

[原始碼和文件分享]基於C++的資料庫可擴容雜湊

一、專案介紹 主要涉及可擴充套件雜湊在資料庫中的應用。 讀入由 tpc-h 生成的 lineitem.tbl,以 L_ORDERKEY 屬性作為鍵值將記錄放入合適的雜湊桶內。讀入測試檔案 testinput.in 內的資料,資料中包含多個需要查詢的鍵值。將通過鍵值查詢得到的所有記錄都輸出到

[原始碼和文件分享]基於C++的簡易資料庫的開發與測試

一 開發說明 1.1 總體說明 本次專案以c++語言編寫簡易資料庫,資料庫為<key:value>的簡單形式,在本專案中,限定key為整數且不考慮溢位問題,value為字串型別,不可為空,長度最長為19(其中第20位為\0字元)。主體程式面向使用者提供四種主要操作,分別為查詢、新

C# http服務端介面,通用資料庫介面、與普通字串型別介面

1、通用資料庫介面,返回型別為dt 2、字串型別介面,傳入關鍵字引數,返回型別為字串 [ServiceContract] public interface IDataBaseService { #region 通用資料庫訪問介面 [

[原始碼和文件分享]基於C#和SQL SERVER資料庫實現的學生圖書管理系統

1 專案介紹 1.1 課程設計的目標 通過課程集中實踐,要求學生加深對講授內容的理解,累積經驗、學會獨立上機除錯程式;並且逐步達到綜合運用封裝、繼承和多型等C#難點知識,更深地理解面向物件程式設計的基本概念與方法,從而學會利用C#語言解決一般應用問題,能設利用視覺化程式設計技術開發複雜和綜合

[原始碼和文件分享]基於C++實現的迷你資料庫

1 引言 1.1 目的 為了深入學習和了解資料庫以及小學期課程需要,我們小組決定自己編寫一個簡單的mini-database。 1.2 背景 1970年,IBM的研究員,有“關係資料庫之父”之稱的埃德加•弗蘭克•科德(Edgar Frank Codd或E. F. Codd)博士在刊物

[原始碼和文件分享]基於C語言和SQL SERVER資料庫實現的圖書管理系統

摘 要 本文根據《資料庫應用系統設計》課程要求而做。選擇圖書館管理系統設計與開發是因為覺得圖書館管理系統對我們的幫助很大,並且經常去圖書館,對圖書館的大部分功能及流程還是比較瞭解,而且現在有些地方可能還不夠完善。這次課程設計目標是建立一個比較好的圖書館管理系統,方便學生查詢,方便管理員管理,節省

[原始碼和文件分享]基於C#和SQL SERVER資料庫實現的餐飲管理系統

摘 要 餐飲管理系統作為一個餐飲的基本管理,是餐飲服務業對職工以及餐飲的日常管理。開發餐飲管理系統,正是完善餐飲業資訊化管理的重要環節。人工操作已很難滿足餐飲業資訊化管理的要求,面對龐大的資訊量,該方式現存在很多弊端。因此,建立現代化的智慧管理系統勢在必行。這樣也大大減輕了餐飲業內部人員的工作量

NET快取框架CacheManager在混合式開發框架中的應用(1)-CacheManager的介紹和使用 基於C#的MongoDB資料庫開發應用(4)--Redis的安裝及使用

在我們開發的很多分散式專案裡面(如基於WCF服務、Web API服務方式),由於資料提供涉及到資料庫的相關操作,如果客戶端的併發數量超過一定的數量,那麼資料庫的請求處理則以爆發式增長,如果資料庫伺服器無法快速處理這些併發請求,那麼將會增加客戶端的請求時間,嚴重者可能導致資料庫服務或者應用服務直接癱瘓。快取方案

.NET快取框架CacheManager在混合式開發框架中的應用(1)-CacheManager的介紹和使用 基於C#的MongoDB資料庫開發應用(4)--Redis的安裝及使用

在我們開發的很多分散式專案裡面(如基於WCF服務、Web API服務方式),由於資料提供涉及到資料庫的相關操作,如果客戶端的併發數量超過一定的數量,那麼資料庫的請求處理則以爆發式增長,如果資料庫伺服器無法快速處理這些併發請求,那麼將會增加客戶端的請求時間,嚴重者可能導致資料庫服務或者應用服務直接癱瘓。快取方案

基於WinForm+Access區域網共享資料庫的專案總結】之篇一:WinForm開發總體概述與技術實現

【小記】:最近基於WinForm+Access資料庫完成一個法律諮詢管理系統。本系統要求類似網頁後臺管理效果,並且基於區域網內,完成多客戶端操作同一資料庫,根據許可權不同分別執行不同功能模組。核心模組為級聯統計型別管理、資料庫諮詢資料扇形統計、樹的操作、諮詢資料的管理、手寫分頁、Excel資料

基於c語言的簡單的mysql資料庫操作

基於c語言的簡單的mysql資料庫操作 最近做專案需要利用c語言對mysql進行獲取資料的操作,於是我對mysql社群提供的c語言呼叫mysql的部分api進行了簡單封裝,這裡做下記錄,方便以後回顧。 以下是對mysql操作函式進行了簡單封裝: #include<

【ASP】連線Access資料庫登陸系統

本文 屬於轉載,原文地址為:http://blog.csdn.net/yongh701/article/details/40976869 一、基本目標 首先在Access資料庫Database.mdb中存在著使用者資訊表test: 編寫一個登陸系統,如果使用者輸入的使用者

#菜鳥新手EclipseJavaEE&MySQL&Tomcat#關於一個Eclipse中登陸介面通過連線MySQL資料庫進行驗證的小體驗(感謝qq群友引燃的解答讓我解決這個小問題)

原始碼: package com.atguigu.javaweb; import java.io.IOException; import java.io.PrintWriter; import java.sql.DriverManager; import j

基於C++的資料庫設計原始碼

現將之前做的一些小東西整理一下,晒一晒,請勿見笑--- 這是一個基於C++,用以模擬Oracle的資料庫,具體操作說明以及原始碼見下 目錄1. 啟動資料庫----------------------------------------------------------31.

MySQL資料庫使用——MySQL在C/C++的API介面

直接操作MySQL,輸入命令效率低,將MySQL嵌入程式中,封裝介面,讓程式去訪問MySQL,才能最大效益利用MySQL。 MySQL C API移植 包含MySQL的工程檔案不應直接關聯電腦已安裝的MySQL,因為不同電腦伺服器安裝的位置不一樣,每次