包含標籤 Database 的文章

使用 AddTypeMap 調整型別映射,讓 Dapper 乖乖寫入 0001-01-01 到 datetime2

Image

這週忙著打黑悟空,簡單記一下前陣子同事遇到的一個場景:

由於曆法的關係,SQL Server 的 datetime 範圍只能從 1753-01-01 開始。
如果我們要寫入 0001-01-01 進去的話就會報錯

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

補充:關於曆法的部份,有興趣的朋友可以參考這篇:
淺談:消失的日期,以關聯式資料庫的日期資料類型為例 - 德瑞克:SQL Server 學習筆記

這時候通常去把資料表欄位改成香香的 datetime2 就可以搞定,爽爽寫入 0001-01-01。

但如果我們正在使用 Dapper,預設會把 C# 的 DateTime 映射到 SQL Server 的 datetime,所以還是會寫入失敗。

這時候我們就需要明確地請 Dapper 幫我們使用 datetime2 來進行處理。


如果傳遞的只是某個參數,使用 DbType 就行了:

var parameters = new DynamicParameters();
parameters.Add("@Birthday", birthday, DbType.DateTime2);

但如果傳遞的是某個 Model 裡的特定欄位呢?例如:

public class HistoricalEvent
{
    public Guid EventId { get; set; }       // 歷史事件的唯一識別碼
    public string Description { get; set; } // 歷史事件的描述
    public DateTime EventDate { get; set; } // 歷史事件發生的日期, 可能早於 1753 年!
}

這種時候就可以使用 AddTypeMap 來調整一下 Dapper 的映射型別。

……

閱讀全文


我要訂便當 (2): 用 Python + Sqlite 儲存訂單

前情回顧:上一集在 我要訂便當(1) —— 用 Python + Selenium 控制瀏覽器取得訂單 中,我們藉由自動化套件 Selenium 控制 Chrome 成功從訂便當網站裡取得訂單資訊了。但只能夠取得現在的訂單,和原本有新訂單的時候才通知的目標仍然有點差距,那麼,如何判斷有沒有新訂單呢?只要和上一次讀取時的訂單相比就能知道了。

目標:將訂單儲存起來,判斷有沒有新訂單。

這一篇主要的做法主要參考自 大數軟體 - 如何透過 Line 發送最新一集的漫畫 中,關於如何判斷是否有最新一集漫畫的部分。這系列的影片步驟明瞭,說明直接,同時標題也很對我胃口(我就喜歡把工具拿來生活周遭玩的感覺),因此這邊也推薦一下,有興趣的可以去看看。

回歸正題,這篇的第一部分就是要使用 Sqlite 將抓到的訂單儲存起來。Sqlite 顧名思義就是 SQL + Lite 的感覺,主打小巧輕便。它會將資料儲存在一個檔案中,並且支援精簡的 SQL 指令,可以說是相當方便。

在 Python 要對 Sqlite 做操作主要是藉由 sqlite3 這個包,因此在接下來的步驟前,請先安裝這個包。關於 Sqlite3 的基本操作,可以參閱 菜鳥教程的 SQLite - Python 教學。

……

閱讀全文


Android: MySQL 連線筆記(使用XAMPP)

之前做給學弟妹參考的簡單筆記,順手放上來,以後遇到的時候可以回來參考。

目標:利用 XAMPP 簡單地架設一個伺服器環境,建立資料庫,並且能在 Android 上取得資料庫的資料。

架設伺服器環境

在電腦架設伺服器環境的工具有很多種,例如 Windows 內建就有的 IIS(通常拿來搭配 ASP.net)以及微軟的 WAMP 等等,或是直接用 Node.js 跑環境兼後端,不勝枚舉。今天要拿來實作的是 XAMPP 這一款。XAMPP 嚴格說起來並不算是一個軟體,而是一個架站懶人包,它的名字是由這些東西組成的:

……

閱讀全文


Asp.net MVC: 連線資料庫、簡單實作 CRUD

在教學時直接使用 EF 對資料庫跑繫結的方式產生各頁面,但得到了「點一點東西就跑出來了搞不懂呀」的回饋,心想有道理。因此從頭開始實作一遍,並記錄下來。(雖然做完還是覺得,直接用 EF 跑的話果然比較安全方便啊)

目標:實作一個 MVC 架構,具資料庫基本操作功能的網站,其中包含連線至資料庫的 model、對其進行調用的 controller 以及顯示的 view。

註:本文預設已在本地電腦上安裝了 SQL Server,並且建立了測試用的資料庫 Test 及表 card,詳情會在文章內述。另外,由於在寫這邊的時候是為了練習手動從編碼開始嘗試連線,故將不使用 EF 連線產生 Edmx 的方式,而是直接手工編寫程式碼進行操作。

另外,關於直接從資料表自動產生可操作的頁面,亦即使用 Entity Framework 做資料繫結的方式,請見 Asp.net MVC 筆記:Entity Framework 連線資料庫

……

閱讀全文


Asp.net MVC: Entity Framework 連線資料庫

目標:將 上一篇的 Asp.net MVC:連線資料庫、簡單實作 CRUD 的資料庫基礎功能改成以 Entity Framework 產生的方式跑一遍

既然上一篇介紹了土法煉鋼動手做的資料庫取值方式,就覺得不順手把從 EF 建立出基本功能介面的方式記錄下來似乎是有點奇怪。實際上開始寫成筆記之後才發現對內容尚不是很了解,例如一直用 Data First 產生頁面但對 Code First 以程式碼產生架構的方式很不熟。儘管如此仍稍微紀錄一下,之後有更深的了解(例如 ASP.NET Identity 或 Code First 等部分)再進一步做成筆記。另外也可參考較詳細的官方文檔

……

閱讀全文