2016年7月29日 星期五

SQL Server 將資料匯出成 Insert into 指令碼

如果一直要建立測試資料庫,除了可以將 Create Table 的語法保留下來之外,對於資料,若也要保留的話,可以使用 SQL  Server 內建的"產生指令碼"功能。

操作步驟如下


可以選擇特定或全部物件來建立指令碼

可以選擇將物件產生的指令碼分別存成單一檔案或分開存

點擊上圖的"進階"後,選擇下圖中的"結構描述和資料"



完成後,只要執行產生的 .sql,就可以將資料直接寫進資料表,而不用手動建資料或匯入資料了。







2016年7月22日 星期五

SQL 跑迴圈

【迴圈的計數方式純次數】
如果要像程式語言
FOR (INT i = 0; i<= 10; i++)
{
}

可以寫成
DECLARE @i INT
DECLARE @LoopCount INT
SET @i = 0
SET @LoopCount = 10
WHILE (@i <= @LoopCount)
BEGIN
    -- 做想做的事
SET @i = @i +1
END

【迴圈的計數方式是從資料表來的】
假設查詢出來的資料表有兩個欄位(Col1, Col2),這兩個欄位在迴圈中都要使用
-- 先定義兩個變數,用來存放每列的 Col1、Col2 的資料
DECLARE @Col1 INT(50)
DECLARE @Col2 NVARCHAR(50)

-- 定義一個指標MyCursor 給 查詢出來的資料表
DECLARE MyCursor CURSOR FOR
SELECT Col1, Col2 FROM Table1

-- 開啟指標
OPEN MyCursor

-- 取出第一筆指標,將指標內的資料塞入變數(指標內的資料需照欄位順序給)
FETCH NEXT FROM MyCursor INTO @Col1, @Col2
WHILE @@FETCH_STATUS = 0 -- 當取出指標中的資料成功時
  BEGIN
                // 這邊就可以針對每筆資料做什麼事
                PRINT @Col1;  // 比方直接顯示出來
                PRINT CONCAT(@Col1, @Col2); // 比方把兩個資料的變數串在一起

                 // 取出下一筆指標,並將指標內的資料塞入變數
  FETCH NEXT FROM MyCursor INTO @Col1, @Col2
  END
CLOSE MyCursor -- 關閉指標
DEALLOCATE MyCursor -- 移除指標參考

2016年7月21日 星期四

在 WinForm 下,ComboBox 下拉選單內容太長時,文字會被切掉

在 WinForm 下,ComboBox 下拉選單內容太長時,文字會被切掉










// 動態改變顯示的長度
private void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("myID");
    dt.Columns.Add("myValue");
    dt.Rows.Add(new object[] { "1", "Bermuda 百慕達" });
    dt.Rows.Add(new object[] { "2", "Bosnia and Herzegovina 波希尼亞及赫塞哥維那" });
    cbxExamination.DataSource = dt;
    cbxExamination.DisplayMember = "myValue";
    cbxExamination.ValueMember = "myID";
    // 在資料繫結後加入以下語法
    SetDropDownWidth(comboCountry);
}
/// <summary>
/// 設定下拉選單下拉後的長度為最長內容的長度
/// </summary>
/// <param name="myCombo"></param>
/// <returns></returns>
private void SetDropDownWidth(ComboBox myCombo)
{
    int maxSize = 0;
    System.Drawing.Graphics g = CreateGraphics();
    for (int i = 0; i < myCombo.Items.Count; i++)
    {
        myCombo.SelectedIndex = i;
        SizeF size = g.MeasureString(myCombo.Text, myCombo.Font);
         if (maxSize < (int)size.Width)
         {
             maxSize = (int)size.Width;
          }
    }
    myCombo.DropDownWidth = myCombo.Width;
    if (myCombo.DropDownWidth < maxSize)
    {
        myCombo.DropDownWidth = maxSize;
    }
}
結果如下

2016年7月13日 星期三

要在ASP.NET 中使用 MathWorks.MATLAB.NET.Arrays.MWNumericArray 這個class時

使用 MathWorks.MATLAB.NET.Arrays.MWNumericArray 時,要注意的事項
1. 需將 MWArray.dll 加入參考(64位元的預設路徑為 Matlab Rumtime 安裝路徑 C:\Program Files\MATLAB\MATLAB Runtime\v90\toolbox\dotnetbuilder\bin\win64\v2.0 )
2. 需要在 64 位元的環境下執行

程式碼:MWNumericArray Threadhold = new MWNumericArray(100);

在Windows Form 下可以正常執行


如果搬到 ASP.NET 中使用,會出現以下錯誤
[Exception: 'MathWorks.MATLAB.NET.Arrays.MWNumericArray' 的類型初始設定式發生例外狀況。]

因為 MWNumericArray 這個 class 需要在 64位元的 IIS 下執行,設定方法如下:
【在 IIS 中】
需要將應用程式集區中的"啟用32位元應用程式"設定為 "False"

【在Visual Studio 的 IIS Express 中】
需要把"工具>選項>專案與方案>Web專案"下的「將 64 位元版本的 IIS Express 用於網站和專案」啟用(打勾)

2016年7月11日 星期一

Javascript 取代字串

replace 只會取代第一個找到的目標
var str = "2016/07/11建立字串";
alert(str.replace("0","零"));
結果會是 "2零16/07/11建立字串"


要取代全部找到的目標,需用RegExp
var str = "2016/07/11建立字串";
alert(str.replace(/0/g,"零"));
結果會是 "2零16/零7/11建立字串"


如果要尋找的目標是變數的話
function replaceAll(str, searchText, newText)
{
   var reg = new RegExp(searchText,"g");
   return str.replace(reg, newText);
}
執行時
alert(replaceAll("2016/07/11建立字串","0","零"));

2016年7月1日 星期五

正則表示式中要注意的部分

[A-z]:不只包含英文字母,還包含了一些鍵盤上的符號,所以應該寫成[A-Z]|[a-z]














參考來源:http://unicode-table.com/en/#

C# 在 DataTable 下 Distinct

在資料庫中,語法可以這麼下
Select Distinct [欄位名稱1], [欄位名稱2] From Table1

在C# 的 DataTable 中下 Distinct,可以這麼寫
DataTable dtDistinct =
          dtOri.DefaultView.ToTable(true, new string[] { "欄位名稱1", "欄位名稱2" });