2017年11月15日 星期三
C# - 列舉的 if 寫法
從 Delphi 以來都有用列舉的習慣,
在 Delphi 有 in 可以用,就像 SQL 中的 in 的用法一樣;
但是在 C# 中沒有 in 可以用,只能在 if 中寫的落落長的東西,例如:
if (currentCar == Cars.Taxi || currentCar == Cars.Bus || currentCar = MRT)
如果要判斷很多 if 就會很長很長又很長....
所以某天想到可以用泛型來處理,程式如下:
public static bool InValueSet<T>(T compareValue, T[] valueSet)
{
foreach (T baseValue in valueSet)
{
if (compareValue.Equals(baseValue))
return true;
}
return false;
}
所以上面的 if 就可以變成下面這樣的寫法,如下:
if (InValueSet<Cars>(currentCar, new Cars[] {Cars.Taxi, Cars.Bus, Cars.MRT})
然後可以宣告一個集合,如下:
Cars[] MassTransport = new Cars[] {Cars.Taxi, Cars.Bus, Cars.MRT}
然後就可以改成如下寫法:
if (InValueSet<Cars>(currentCar, MassTransport)
這樣就簡潔多了,舒坦............
如何在安裝 Windows Service 時,指定不同名稱
我們的 AP Server 是一個 windows service ,
但是每次遇到客戶需要安裝好幾個環境時,
就會需要 compile 好幾個程式給客戶,
只是因為用 InstallUtil.exe 在安裝 windows service 時無法指定名稱。
總覺得這樣不是辦法,經過一陣估狗之後發現有別的指令可以用,如下:
參考:【以任何方式重写.NET Windows服务名称,而不重新编译?】
但是每次遇到客戶需要安裝好幾個環境時,
就會需要 compile 好幾個程式給客戶,
只是因為用 InstallUtil.exe 在安裝 windows service 時無法指定名稱。
總覺得這樣不是辦法,經過一陣估狗之後發現有別的指令可以用,如下:
sc create MyService binPath= "MyService.exe" DisplayName= "MyService"
sc description MyService "My description"
參考:【以任何方式重写.NET Windows服务名称,而不重新编译?】
標籤:
MS Windows Server,
Win8.1
如何不要讓 Microsoft SQL Server Management Studio 一直跳出中文輸入法
因為每次跳到 Microsoft SQL Server Management Studio 時,
輸入法就自動轉為中文輸入,
這實在是一件很惱人的事情,
後來很努力地找尋,終於在【選項】中找到可以設定的地方
在【國際設定】中,將【語言】改成【與 Microsoft Windows 相同】就可以
不過剛剛發現,在 17.3 版之中還沒有這個選項可以選 T_T
輸入法就自動轉為中文輸入,
這實在是一件很惱人的事情,
後來很努力地找尋,終於在【選項】中找到可以設定的地方
在【國際設定】中,將【語言】改成【與 Microsoft Windows 相同】就可以
不過剛剛發現,在 17.3 版之中還沒有這個選項可以選 T_T
2017年10月31日 星期二
如何新增捷徑到開始畫面
2017年10月2日 星期一
bat & sqlcmd 筆記
會寫 bat 主要是因為每次改完程式之後會需要更新好幾個環境
ex.今天的修改紀錄資料夾、公司環境的資料夾等等
單純的複製到固定名稱的資料夾大致上沒啥問題
比較大的問題是【今天的修改紀錄資料夾】的"今天",
代表的我每天都要複製到不同的日期資料夾去...
估狗了一下,
@set A=%date:/=%
@set B=%A:~0,8%
@set C="\\UPDATE\%B%\DLL\"
假設今天是 2017/10/2 用上面的寫法可以得到
C="\\UPDATE\20171002\DLL\"
可是每次都要先去檢查有沒有件資料夾,所以...
IF NOT EXIST %C%. (MKDIR %C%.)
ex.今天的修改紀錄資料夾、公司環境的資料夾等等
單純的複製到固定名稱的資料夾大致上沒啥問題
比較大的問題是【今天的修改紀錄資料夾】的"今天",
代表的我每天都要複製到不同的日期資料夾去...
估狗了一下,
@set A=%date:/=%
@set B=%A:~0,8%
@set C="\\UPDATE\%B%\DLL\"
假設今天是 2017/10/2 用上面的寫法可以得到
C="\\UPDATE\20171002\DLL\"
可是每次都要先去檢查有沒有件資料夾,所以...
IF NOT EXIST %C%. (MKDIR %C%.)
上面的寫法可以檢查有沒有 \20171002\DLL 的資料夾,
如果沒有,則執行 MKDIR 建立
到了以上,自動複製 dll 的沒有問題了
再來就是 SQL 檔的問題了,每次還又一個一個更新 DB 很煩,
真想請一個小助手來幫忙...
所以又找到了 sqlcmd ,
但是發現 sqlcmd 在每一版的 SQL SERVER 提供的命令、參數,甚至是寫法都不一樣
所以首先就先指定 sqlcmd 的路徑,我是直接設定變數指定
@set SQLPATH="C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\sqlcmd"
然後指定好下面的參數
@set TEST= -S FRANKIE\sql2014 -U sa -P 1234567 -d FRANKIE_TEST -i
- -S 指定 SQL SERVER 主機\Instances
- -U 指定登入的帳號
- -P 指定登入帳號的密碼
- -d 指定DB
- -i 要執行的 SQL 檔案
假設我們要執行的是 AAA.SQL
%SQLPATH%%TEST% AAA.SQL
大概會組合出
C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\sqlcmd -S FRANKIE\sql2014 -U sa -P 1234567 -d FRANKIE_TEST -i AAA.SQL
不過我想執行資料夾下面的所有 SQL 檔,
所以再度估狗一下,最後用 FOR 處理,
直接在 CMD 視窗測試 FOR 的時候都OK,
可是從 BAT 檔執行的時候卻一直跳出錯誤,
原來變數在 CMD 視窗的時候是 %i
但是在 BAT 檔的時候要變成 %%i
最後寫在 BAT 的 FOR 如下:
for %%i in (*.sql) do %SQLPATH%%TEST% %%i
(*.sql) 會幫我把執行所在的資料夾中的 SQL 全部都找出來,
然後執行 do 後面的事情。
寫到這裡,更新資料夾與 DB 對我來說變成只是 double click 了,喔耶~~~
但是事情還是做不完,囧rz
標籤:
BAT,
CMD,
MS SQL Server,
SQLCMD
無法載入檔案或組件 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0 ...
前陣子因為 NB 的 SSD 快滿了,
所以只好開始移除一些用不太到的東西,
然後今天就發生問題了....
果然東西是不可以亂移除的....
問題發生在 VS2013 要從資料庫拉 Table 到 DataSet 的時候,
跳出了下面的訊息
---------------------------
伺服器總管
---------------------------
無法加入資料連接。
無法載入檔案或組件 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 或其相依性的其中之一。 系統找不到指定的檔案。
---------------------------
確定
---------------------------
上網找了錯誤訊息,大概是 SQL SERVER 2012 被我移除的關係
網路上的說法大致上是要補回下面這幾個就可以
但是因為我已經安裝了更新版本的 SQL SERVER 2014/2016 了,
所以 SQLSysClrTypes.msi 無法安裝上!
網路上是說要退版啦~~~
不過後來我直接安裝了 SharedManagementObjects.msi 之後就可以了。
但是我比較想知道如何更換 VS 2013 裡面指定的 Version=11.0.0.0 ?
補充下載點 Microsoft® SQL Server® 2012 SP1 功能套件
所以只好開始移除一些用不太到的東西,
然後今天就發生問題了....
果然東西是不可以亂移除的....
問題發生在 VS2013 要從資料庫拉 Table 到 DataSet 的時候,
跳出了下面的訊息
---------------------------
伺服器總管
---------------------------
無法加入資料連接。
無法載入檔案或組件 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 或其相依性的其中之一。 系統找不到指定的檔案。
---------------------------
確定
---------------------------
上網找了錯誤訊息,大概是 SQL SERVER 2012 被我移除的關係
網路上的說法大致上是要補回下面這幾個就可以
- SQLSysClrTypes.msi (這個要先安裝)
- SharedManagementObjects.msi
- SqlServer2005_XMO.msi
但是因為我已經安裝了更新版本的 SQL SERVER 2014/2016 了,
所以 SQLSysClrTypes.msi 無法安裝上!
網路上是說要退版啦~~~
不過後來我直接安裝了 SharedManagementObjects.msi 之後就可以了。
但是我比較想知道如何更換 VS 2013 裡面指定的 Version=11.0.0.0 ?
補充下載點 Microsoft® SQL Server® 2012 SP1 功能套件
標籤:
Troubleshooting,
VS2013
訂閱:
文章 (Atom)