2015年2月27日 星期五

CASE WHEN IS NULL

引用
SELECT (CASE WHEN PUR_AMT IS NULL THEN 0 ELSE PUR_AMT END) PUR_AMT 
FROM   PDA_PCOTI

2015年2月24日 星期二

MSSQL 輸出千分位

引用
1.ASCII轉換10進位、16進位
有時候我們必須要知道字串對應到ASCII是10進位的哪個數字,最簡單方式如下:
int tenNum = (int)'A'; //字元轉出ASCII 10進位表示
Console.WriteLine(string.Format("10進位數字:{0}", tenNum.ToString()));
string hexNum = Convert.ToString(tenNum,16); //轉成16進位表示
Console.WriteLine(string.Format("16進位數字:{0}", hexNum));


2.字串反轉
由於工作上廠商寫入RFID的資料,不知為啥要反過來,所以逼得我要將讀取出來的資料做個反轉!!
string testString = "ABCDEF";
char[] testCharArr = testString.ToCharArray();
Array.Reverse(testCharArr);
Console.WriteLine(new String(testCharArr));

3.MSSQL 輸出千分位!
最近有個小需求,希望在頁面上呈現【1,000.00】這種數字樣式,當然從資料庫撈出後,再用C#轉換也可以。
但既然TSQL也能做到不如就直接轉換吧!!
select convert(varchar,CONVERT(MONEY,MyColumn),1)  from MyTable

2015年2月9日 星期一

DataGridView取欄位值

抓取GridView裡的欄位值

   LOT.Text = GridView3.Rows(0).Cells(10).Text

Private SubDataGridView1_CellContentClick(ByVal sender As System.Object, ByValAsSystem.Windows.Forms.DataGridViewCellEventArgs) HandlesDataGridView1.CellContentClick
    '點選單一儲存格
   DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect
   MsgBox("你點選了:" & DataGridView1.CurrentCell.Value.ToString)
    Me.DataGridView1.SelectionMode =DataGridViewSelectionMode.FullRowSelect
    End Sub

    Private SubButton1_Click(ByVal sender As System.Object, ByValAs System.EventArgs) HandlesButton1.Click
    '選取整列
    '先點一下最左邊儲存格選取整列再按按鍵
    Dim I, C, R As Integer
    Dim Sel_Count As Integer
    Dim S As String
    Me.DataGridView1.SelectionMode =DataGridViewSelectionMode.FullRowSelect
   Sel_Count =DataGridView1.GetCellCount(DataGridViewElementStates.Selected)
    For I = 0 To Sel_Count- 1
   C = DataGridView1.SelectedCells(I).ColumnIndex
   R = DataGridView1.CurrentRow.Index
   DataGridView1.CurrentCell = DataGridView1(C, R)
   S = S + DataGridView1.CurrentCell.Value.ToString & vbCrLf
    Next
   MsgBox("你點選了第" & DataGridView1.CurrentRow.Index & "" & vbCrLf & S)
    EndSub

2015年2月8日 星期日

在已繪製的文字中設定定位停駐點

如何:在已繪製的文字中設定定位停駐點

.NET Framework 4.5
您可以經由呼叫 StringFormat 物件的 SetTabStops 方法,然後將該 StringFormat 物件傳遞至 Graphics 類別的 DrawString 方法,以設定文字的定位停駐點。
注意事項 注意事項
System.Windows.Forms.TextRenderer 不支援將定位停駐點加入至繪製的文字,但您可以使用 TextFormatFlags.ExpandTabs 旗標擴充現有的定位停駐點。

下列範例會在 150、250 和 350 設定定位停駐點。 然後程式碼會顯示名稱和考試成績的索引標籤式清單。
下圖顯示的是索引標籤式文字。
字型文字
下列程式碼會將兩個引數傳遞至 SetTabStops 方法。 第二個引數是包含定位點位移 (Offset) 的陣列。 傳遞至 SetTabStops 第一個引數是 0,表示陣列中的第一個位移是從週框左邊緣的位置 0 開始測量。
        Dim myText As String = _
           "Name" & ControlChars.Tab & _
           "Test 1" & ControlChars.Tab & _
           "Test 2" & ControlChars.Tab & _
           "Test 3" & ControlChars.Cr

        myText = myText & "Joe" & ControlChars.Tab & _
                          "95" & ControlChars.Tab & _
                          "88" & ControlChars.Tab & _
                          "91" & ControlChars.Cr
        myText = myText & "Mary" & ControlChars.Tab & _
                          "98" & ControlChars.Tab & _
                          "84" & ControlChars.Tab & _
                          "90" & ControlChars.Cr
        myText = myText & "Sam" & ControlChars.Tab & _
                          "42" & ControlChars.Tab & _
                          "76" & ControlChars.Tab & _
                          "98" & ControlChars.Cr
        myText = myText & "Jane" & ControlChars.Tab & _
                          "65" & ControlChars.Tab & _
                          "73" & ControlChars.Tab & _
                          "92" & ControlChars.Cr

        Dim fontFamily As New FontFamily("Courier New")
        Dim font As New Font( _
           fontFamily, _
           12, _
           FontStyle.Regular, _
           GraphicsUnit.Point)
        Dim rect As New Rectangle(10, 10, 450, 100)
        Dim stringFormat As New StringFormat()
        Dim solidBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
        Dim tabs As Single() = {150, 100, 100, 100}

        stringFormat.SetTabStops(0, tabs)

        e.Graphics.DrawString(myText, font, solidBrush, RectangleF.op_implicit(rect), stringFormat)

        Dim pen As Pen = Pens.Black
        e.Graphics.DrawRectangle(pen, rect)



2015年2月7日 星期六

主板診斷卡常見代碼及解決

診斷卡代碼     主板診斷卡常見代碼及解決
                   
一、常見代碼及解決:
    1: FF、00、01、02 狀態不跳變 CPU未工作
        推論:主板或CPU壞
    2:C1(或C開頭)、D3(或D開頭) CPU已工作正在尋找內存
        推論:內存壞、接觸不好
    3:C0、D1 狀態,CPU已發出尋址指令並已選中BIOS,但是BIOS沒有響應
        推論:BIOS、南橋、IO壞
    4:C1--C5循壞跳變(同D3--D5)
        推論:BIOS、IO芯片壞
    5:OB、26、31時一般可點亮,如不亮
        推論:顯卡、集成顯卡壞
    6:0B、26、31、42、48、4E、58、0D、6F、7F、85
              推論:表示主板能點亮,正檢查顯卡和鍵盤鼠標口,如果仍不亮大多為顯卡壞

常出現的代碼而又出現此碼無解的主要是 75、C1、C0、EF
解釋大概如下
     75正在掃瞄硬件配置,查硬盤,光驅設備及相關接口設備和接線有否有故障
     C1或C0內存故障
     EFbios故障,需要對cmos進行放電操作
     如果一開機檢查卡只有電壓顯示而沒有代碼顯示,就檢查cpu是否有故障
                   
二、其他常用代碼:
1. 檢測卡跑00,CO,CF,FF或D1:
     原因:CPU插槽髒。針腳壞,接觸不好。CPU,內存超頻了。CPU供電不良。某芯片發熱,硬件某部分資源不正常,在CMOS裡把其關閉或更換該集成資源的芯片。
2. C1,C2,C6,C7或E1:
     內存接觸不良,(用鑷子劃)。
     測內存工作電壓(SDRAM 3.3V,DDR 2.5和1.6V。)
     測時鐘
     CPU旁排阻是否有損壞。
     測CPU地址線和數據線。
     北橋壞。
                   
3.C1~05循環跳變:
     BIOS損壞
     I/O壞或者南橋壞.
                   
4.C1,C3,C6:
     刷BIOS
     換電源,換CPU,換轉接卡有可以解決問題.
     檢查BIOS座.
     PCB斷線,板上粘有導電物.
     清洗內存和插槽.
     換內存條.換內存插槽.
     換I/O.北橋虛焊或者壞.
                   
5.循環顯示C1~C3.或者C1~C5等.
     刷BIOS.
     換I/O有時可解決問題.
     PCB斷線,板上粘有導電物.
     可考慮換電容.換CPU.換內存.
     南橋壞.
                   
6.顯BO代碼:
      看內存電壓,清CMOS,北橋壞.
                   
7.顯示25代碼:
      北橋問題.
                   
8.跑0D後不亮:
      外頻,倍頻跳線.
                   
9.顯2B代碼後不亮:
      刷BIOS.清除 BIOS.時鐘發生器不良.北橋供電不正常或者北橋壞.
                   
10.跑50代碼:
      I/O錯,南北橋,BIOS壞.
                   
11.跑41代碼:
      BIOS刷新.PCB壞或者上面有導電物.
                   
12.跑R6代碼:檢測不到顯卡.劃者是內存沒有過.
13.跑 R7代碼:顯卡初始化沒有完成.是內存錯,或者是顯卡沒有插好.清洗插槽.反覆插試內存.
14.跑E0代碼:CPU 沒有工作.插槽髒,針腳壞.
                   
                   
1、"C1"內存讀寫測試,如果內存沒有插上,或者頻率太高,會被BIOS認為沒有內存條,那麼POST就會停留在"C1"處。
2、"0D"表示顯卡沒有插好或者沒有顯卡,此時,蜂鳴器也會發出嘟嘟聲。
3、"2B"測試磁盤驅動器,軟驅或硬盤控制器出現問題,都會顯示"2B"。
4、"FF"表示對所有配件的一切檢測都通過了。但如果一開機就顯示"FF",這並不表示系統正常,而是主板的BIOS出現了故障。導致的原因可能有:CPU沒插好,CPU核心電壓沒調好、CPU頻率過高、主板有問題等。
                   
如果診斷卡的代碼跑00或FF停止,說明CPU還沒有開始工作,一般是CPU或主板的問題;

代碼從00 FF跑到C1或D3(BIOS不同跑的代碼不一定相同)說明CPU是好的,問題出在內存部分沒有工作,一般是內存的金手指或插槽髒了,或者主板給內存提供的工作條件不足,也就是說可能是主板壞了;

代碼從00 FF跑到26,一般來說如果顯卡和主板沒有問題的話,顯示器就應該點亮了;
如果代碼從00 FF跑到41,主機不亮,有很大的可能是BIOS壞了,要重新刷寫或更換BIOS。
診斷卡從00 FF代碼經過CI C3 05 07 13 26 (0B)41 43等等代碼後再次跑回00或FF,說明主板的啟動過程完畢,開始按照CMOS的設置進行引導。

2015年2月6日 星期五

LenB函數

VB.NET
Public Shared Function CharByte(ByVal vstrWord As String) As Integer
    'aStr字串之第一個字的位元組長度
    If Len(vstrWord) = 0 Then
        Return 0
    Else
        Select Case Asc(vstrWord)
            Case 0 To 255
                Return 1
            Case Else
                Return 2
        End Select
    End If
End Function

Public Shared Function StrLenB(ByVal vstrValue As String) As Integer
    '如同VB 6.0的LenB函數,傳回字串aStr的位元組長度
    Dim i, k As Integer
    For i = 1 To Len(vstrValue)
        k += CharByte(Mid(vstrValue, i, 1))
    Next
    Return k
End Function

MessageBox.Show(StrLenB("a").ToString()) 'return 1
MessageBox.Show(StrLenB("abc").ToString()) 'return 3
MessageBox.Show(StrLenB("a亂").ToString()) 'return 3
MessageBox.Show(StrLenB("a亂b").ToString()) 'return 4

C#
public static int CharByte(string vstrWord)
{
    //aStr字串之第一個字的位元組長度
    if (vstrWord.Length  == 0)
    {
        return 0;
    }
    else
    {
        if(Convert.ToInt32(vstrWord[0]) > 255){
            return 2;
        }else{
            return 1;
        }
    }
}

public static int StrLenB(string vstrValue)
{
    //如同VB 6.0的LenB函數,傳回字串aStr的位元組長度
    int i = 0;
    int k = 0;
    for (i =0; i < vstrValue.Length ; i++)
    {
        k += CharByte(vstrValue.Substring( i, 1));
    }
    return k;
}

MessageBox.Show(StrLenB("a").ToString()); //return 1
MessageBox.Show(StrLenB("abc").ToString()); //return 3
MessageBox.Show(StrLenB("a亂").ToString()); //return 3
MessageBox.Show(StrLenB("a亂b").ToString()); //return 4