Win10 IoT C#開發 5 - 操作 IoT 設備內嵌 SQLite 資料庫 CURD

来源:http://www.cnblogs.com/cloudtech/archive/2016/07/10/5657123.html
-Advertisement-
Play Games

Windows10 IoT Core 使用 C#創建 IoT設備應用程式,通過應用程式創建IoT設備本地SQLite資料庫,並創建數據表,執行插入、更新、刪除數據等操作。 ...


Windows 10 IoT Core 是微軟針對物聯網市場的一個重要產品,與以往的Windows版本不同,是為物聯網設備專門設計的,硬體也不僅僅限於x86架構,同時可以在ARM架構上運行。

前幾章我們講了 Raspberry 安裝 Win10 IoT 系統及搭建開發環境、部署程式及操作 GPIO 和 UART 的方法,通過這些功能我們已經可以獲得到感測器發送給我們的數據,但是如果數據不能及時推送回伺服器就需要在本地緩存,使用 SQLite 資料庫是一個不錯的選擇。這一章我們來看如何操作 IoT設備上的 SQLite資料庫。如果對安裝部署過程還不熟悉可以參考前幾篇文章,Raspberry安裝 IoT系統及搭建開發環境(http://www.cnblogs.com/cloudtech/p/5562120.html),創建 IoT應用及三種部署方法(http://www.cnblogs.com/cloudtech/p/5637983.html)。

 

準備工作:

刷好Win 10 IoT Core系統的 Raspberry Pi 2

部署Visual Studio 2015開發環境的PC

安裝sqlite3的PC

 

實驗目標:部署應用程式到 IoT設備,併在設備上創建 SQLite資料庫,進行 CURD操作。通過 FTP下載 IoT設備端的 SQLite資料庫,在PC端使用 sqlite3查看資料庫中的數據來驗證資料庫操作成功。

1.Visual Studio 2015 安裝 SQLite 擴展

打開 VS2015在 Tools 菜單中選擇 Extensions and Updates 菜單項。

為 VS2105安裝 SQLite的平臺擴展,在搜索框中輸入sqlite查找,Search Results 中選擇 SQLite for Universal Windows Platform 進行下載安裝。

2.創建IoT項目並引用SQLite擴展

首先創建一個 Universal Windows應用程式,打開 VS 2015 點擊 New Project 在Visual C# -> Windows -> Universal 中找到 Blank App (Universal Windows) 項目模板,選中模板輸入項目名稱後點擊OK按鈕創建項目。

創建完成後為項目添加 SQLite平臺擴展,右鍵選中項目點擊 Add Reference,在彈出視窗的樹視圖中選中 Universal Windows -> Extensions,列表中勾選 SQLite for Universal Windows Platform。

然後為項目添加 SQLite的類庫的引用,在 Tools菜單中選擇 NuGet Package Manager的 Manage NuGet Packages for Solution的菜單項。

在彈出的 NuGet界面中搜索 sqlitepcl,在搜索結果列表中選擇SQLitePCL,勾選右側項目列表中的 CloudTechIoT5,點擊 Install按鈕開始安裝。

3.編寫代碼

代碼工作流程:

首先在 IoT設備上創建名為 IoT5DB.sdf 的 SQLite資料庫文件,在資料庫中創建表 users,包含2個欄位,id為主鍵 Integer類型自增長,name為text類型,向users表中插入三條數據,name欄位值分別為 IoT-1、IoT-2、IoT-3。

然後更改第二條數據的name欄位值為"IoT-dd-HH:mm:ss"格式,時間為當前時間。

最後刪除第一條數據。

完整代碼如下:

MainPage.xaml.cs

namespace CloudTechIot5
{
    //http://www.cnblogs.com/cloudtech
    //[email protected]
    public sealed partial class MainPage : Page, INotifyPropertyChanged
    {
        #region Fields
        //資料庫名
        private string _dbName;
        //表名
        private string _tableName;
        //name欄位的數據集合
        private string[] _names = { "IoT-1", "IoT-2", "IoT-3" };

        #endregion

        #region Events

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        #region Properties

        private string _result;
        //操作結果
        public string Result
        {
            get
            {
                return _result;
            }

            set
            {
                _result = value;
                OnPropertyChanged("Result");
            }
        }

        #endregion

        #region Constructor

        public MainPage()
        {
            //初始化
            _result = "Processing...";
            _dbName = "IoT5DB.sdf";
            _tableName = "users";
            this.InitializeComponent();
            //簡易MVVM框架
            this.DataContext = this;
            //創建資料庫連接
            using (SQLiteConnection connection = CreateDbConnection())
            {
                //創建表
                CreateTable(connection);
                foreach (string name in _names)
                {
                    //插入數據
                    InsertRow(connection, name);
                }
                //更新第二條數據
                UpdateRow(connection, string.Format("IoT-{0}", DateTime.Now.ToString("dd-HH:mm:ss")), _names[1]);
                //刪除第一條數據
                DeleteRow(connection, _names[0]);
            }
            //更新界面
            Result = "Completed...";
        }

        #endregion

        #region Methods

        private SQLiteConnection CreateDbConnection()
        {
            //創建連接
            SQLiteConnection connection = new SQLiteConnection(_dbName);
            if (null == connection)
            {
                throw new Exception("create db connection failed");
            }
            return connection;
        }

        private void CreateTable(SQLiteConnection connection)
        {
            //創建表
            string sql = string.Format("create table if not exists {0} (id integer primary key autoincrement,name text)", _tableName);
            using (ISQLiteStatement sqliteStatement = connection.Prepare(sql))
            {
                //執行語句
                sqliteStatement.Step();
            }
        }

        private void InsertRow(SQLiteConnection connection, string name)
        {
            //插入數據
            string sql = string.Format("insert into {0} (name) values (?)", _tableName);
            using (ISQLiteStatement sqliteStatement = connection.Prepare(sql))
            {
                //綁定參數
                sqliteStatement.Bind(1, name);
                //執行語句
                sqliteStatement.Step();
            }
        }

        private void UpdateRow(SQLiteConnection connection, string newName, string oldName)
        {
            string sql = string.Format("update {0} set name = ? where name = ?", _tableName);
            using (ISQLiteStatement sqliteStatement = connection.Prepare(sql))
            {
                //綁定參數
                sqliteStatement.Bind(1, newName);
                sqliteStatement.Bind(2, oldName);
                //執行語句
                sqliteStatement.Step();
            }
        }

        private void DeleteRow(SQLiteConnection connection, string name)
        {
            string sql = string.Format("delete from {0} where name = ?", _tableName);
            using (ISQLiteStatement sqliteStatement = connection.Prepare(sql))
            {
                //綁定參數
                sqliteStatement.Bind(1, name);
                //執行語句
                sqliteStatement.Step();
            }
        }

        public void OnPropertyChanged(string propertyName)
        {
            //MVVM依賴屬性事件
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
    }
}

MainPage.xaml

<Page
    x:Class="CloudTechIot5.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CloudTechIot5"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Page.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="FontSize" Value="50"></Setter>
            <Setter Property="FontWeight" Value="Bold"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
            <Setter Property="HorizontalAlignment" Value="Center"></Setter>
        </Style>
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical">
            <TextBlock Text="[email protected]"/>
            <TextBlock Text="{Binding Result, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>
        </StackPanel>
    </Grid>

4.部署應用

為Raspberry連接電源及網線,等待Windows 10 IoT 系統啟動完成。

在 Visual Studio 2015 的工具欄中選擇 Remote Machine 進行調試,IP地址輸入設備對應地址。點擊運行後應用自動部署到設備上。

應用部署完成後開始運行,顯示如下界面說明資料庫操作已執行完成。

5.驗證結果

關閉剛纔部署的 IoT應用,Win10 IoT預設開啟 FTP服務,打開FTP客戶端連接IoT設備(這裡使用的FTP客戶端是FileZilla),從 IoT設備如下位置下載生成的資料庫文件。

\Data\Users\DefaultAccount.MINWINPC\AppData\Local\Packages\{Package_Family_Name}\LocalState\{DbName}

 

Package Family Name在 Package.appxmanifest中查看。

在 SQLite官網 http://www.sqlite.org/download.html 下載 sqlite3 tools。

在 CMD中使用 sqlite3 tools 輸入命令 "sqlite3 IoT5DB.sdf" 打開下載的 SQLite 資料庫文件。

輸入SQL語句 "select * from users;" 查看表 users中的數據。

id為1的數據不存在。

id為2的數據name欄位值為IoT-10-19:18:52。

id為3的數據name欄位值為IoT-3。

資料庫中的數據與預期結果一致。

到這裡C#操作 Win10 IoT設備本地 SQLite資料庫的過程就完成了,如果對代碼有優化的建議,歡迎留言或發郵件給我([email protected])。也可以掃描下麵的二維碼加我的微信號查看以前的文章。

項目源碼 GitHub https://github.com/CloudTechx/CloudTechIot 的 CloudTechIot5 目錄下。

Win10 IoT C#開發 1 - Raspberry安裝IoT系統及搭建開發環境 http://www.cnblogs.com/cloudtech/p/5562120.html
Win10 IoT C#開發 2 - 創建基於XAML的UI程式 及 應用的三種部署方法 http://www.cnblogs.com/cloudtech/p/5637983.html
Win10 IoT C#開發 3 - GPIO Pin 控制發光二極體 http://www.cnblogs.com/cloudtech/p/5617902.html
Win10 IoT C#開發 4 - UART 串口通信 http://www.cnblogs.com/cloudtech/p/5518306.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常常有一些特殊的MIME類型是IIS中沒有的,一般來說要我們自己手動添加。如果網站經常更換伺服器或者網站代碼是提供給多個用戶使用,那麼會造成網站中用到的特殊的MIME類型要經常性的在IIS上配置。這裡考慮到一個網站配置通用性問題,所以我們可以將MIME類型添加到ASP.NET網站的配置文件中,這樣用 ...
  • 前言 在前面文章中,介紹了 ASP.NET Core在 macOS,Linux 上基於Nginx和Jexus的發佈和部署,本篇文章主要是如何在Docker容器中運行ASP.NET Core應用程式。 ASP.NET Nginx 發佈和部署 : "http://www.cnblogs.com/savo ...
  • 背水一戰 Windows 10 之 綁定: 通過 Binding 綁定對象, 通過 x:Bind 綁定對象, 通過 Binding 綁定集合, 通過 x:Bind 綁定集合 ...
  • 在web.config文件配置了用戶控制項 然後在aspx頁面引用該控制項 時會拋出異常“因為此控制項已在 web.config 中註冊並且與該頁位於同一個目錄中” 出錯原因: 在web.config中註冊的控制項不可以以與調用的頁面於同級目錄 解決辦法: 1、對於ascx和aspx位於同一目錄的,直接在P ...
  • Async in C# 5.0(C#中的非同步編程Async) 蝸牛翻譯之第五章 ...
  • 微軟發佈NET Core1.0正式版本,並支持了red hat linux平臺,所以在CentOS平臺,通過編輯器玩下控制器程式。 一、安裝.NET Core SDK 先下載SDK並放在指定目錄。 二、初始化例子代碼 1、創建應用程式目錄 2、定位到創建的目錄“MyFirstApp”,並創建應用程式 ...
  • 隨著ASP.NET Core 1.0 rtm的發佈,網上有許多相關.net core 相關文章,今剛好有時間也在win10環境上搭建下 ASP.NET Core的部署環境,把過程記錄下給大家。 1. 開發運行環境 1> Visual Studio 2015 Update 3* 2> .NET Cor ...
  • 1.網站地址:http://www.freeboygirl.com2.網站Asp .Net Core 資料http://www.freeboygirl.com/blog/tag/asp%20net%20core3.各類最新Asp .Net Core 項目和示例源碼​ github.com/freeb ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...