2019年11月25日 星期一

利用 MSSQL mdf 檔案,快速將 SQL Server DB 轉移

因為公司一台測試環境電腦的DB突然掛了,
需要將另一個DB快速轉移過來,
怕自己以後忘記,先記錄下來步驟。

將要轉移的DB 複製到本機的資料夾中,
總共有2個檔案
1. xxx.mdf
2. xxx_log.ldf (可有可無)
檔案位置可能路徑如下,
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA

開啟 SQL Server Management Studio 程式

使用預設最高權限登入資料庫


點選 [資料庫] -> 右鍵 (附加)

選擇要附加的資料庫檔名

如果選擇的 DB 沒有 xxx_log.ldf  檔案,會出現找不到檔案的警告,只要移除就可以了

接下來點選 [資料庫] - [新加入的DB名稱] - [安全性] - [使用者]
不能選到主要的 [安全性] ,刪錯就完了
如果裡面有指定 User Name ,必須移除,因為該 User ID 已不能使用,

再重新建立 User (視需求而定,是否要同名稱,或是新的 User 都可以)
這裡要選的是根目錄那層的安全性,不是資料庫裡的

然後根據需求,輸入帳號密碼,還有驗證方式
最後選擇預設資料庫,指到剛才加入的 DB Name

在左邊的選取頁面中,點選 [伺服器角色],勾選 Public (依實際需求)

左邊的選取頁面中,點選 [使用者對應] ,勾選要對應的 DB Name 和角色成員

加入後就可以在原來的
[資料庫] - [新加入的DB名稱] - [安全性] - [使用者]
找到新加入的 User Name 了

最後使用新建立的 UserID / Password 連線資料庫看看,是不是 Table 都可以看到了。

如果資料庫不想用需要缷離,只要點選該資料庫,右鍵 [工作]->[缷離] 就可以了



2019年5月14日 星期二

在64位元環境下動態載入DLL



繼2011年發佈一篇文章
將非 COM 元件的外部 DLL ,包入 .NET 開發的執行檔中
直到現在又遇到問題了,趕緊寫下來記錄
本來專案都 Complier 成 x86,所以在64位元系統下仍然以 32位元在RUN,
但最近公司要求換成 AnyCPU,這下子就出問題了,

''原來的寫法,在64位元系統會取到 IntPtr 值為 0 的問題
    Friend Declare Function GetProcAddress Lib "kernel32" (ByVal ModuleHandle As Integer, ByVal ProcName As String) As Integer
    ''改成 IntPtr ,執行到 GetProcAddress 會有數學運算溢位的錯誤
    Friend Declare Function GetProcAddress Lib "kernel32" (ByVal ModuleHandle As Integer, ByVal ProcName As String) As IntPtr 
    

後來在
https://www.daniweb.com/programming/software-development/threads/207639/getprocaddress-and-function-pointers
的文章發現一個寫法,
    Friend Declare Function GetProcAddress Lib "kernel32" (ByVal ModuleHandle As IntPtr, <[In](), MarshalAs(UnmanagedType.LPStr)> ByVal lpProcName As String) As IntPtr


我一直以為在 64位元 GetProcAddress 回傳的值要改成 IntPtr,漏了傳入參數也要跟著換,
   '最後換成以下寫法就可以
   Friend Declare Function GetProcAddress Lib "kernel32" (ByVal ModuleHandle As IntPtr, ByVal ProcName As String) As IntPtr

換完後,好奇的我再試一下 x86 是否可以通用,
結果是可以的,再查了一下 IntPtr ,才發現這個元件根據 OS 的位元數,所回傳的值也會不同,
也就是從頭到尾只要統一用 IntPtr 就可以了,嗯~又學到一課了!

2019年1月24日 星期四

挑戰 9x9乘法表 練習小程式 (小學數學 加法,減法,乘法 練習)

為了小朋友的9x9乘法表練習,寫了一個挑戰9x9乘法表的小程式,
主要目的是訓練小朋友熟悉9x9乘法表,
可以選擇時間長度,最少1分鐘
再來是要做的題目數多少?


當點撃[開始挑戰] 按鈕時,會進入另一個答題畫面,

只要在答案欄中輸入答案,直接按下 Enter 就可以繼續下一題,
結束後會有統計資料,若是答題錯誤,在右邊的記錄欄可以清楚看到紅色標記

當時間有限,有時又要思考比較久,小朋友可以直接按下 Enter 讓答案空白,
在事後統計時,可以針對答錯的部份再多加練習。
程式中也加了一些音效,增加趣味性,希望小朋友願意多練習!

執行檔下載 (7z 檔案, 173 kB)
程式碼下載 (VB.Net 2015)



2019/10/28 更新
1. 新增加法,減法的練習
2. 新增測驗範圍設定畫面

在程式主畫面中,點選題目範圍的綠色框內容,會跳出設定畫面
預設 加減法最大到99,乘法最大數到10


設定題目最大的數目,若勾選加入測驗,
則出題會包含所選的算式,

如果回答錯誤,右邊記錄欄會順便把正確解答放在後面


V1.0.1.1 執行檔下載 (7z 檔案, 181 kB)
V1.0.1.1 程式碼下載 (VB.Net 2015) (7z 檔案, 162 kB)

檔案壓縮為 7Z 若無法解壓縮請到官網自行下載軟體安裝(免費). https://www.developershome.com/7-zip/