2009年5月14日 星期四

用C# INSERT有單引號( ' )的資料,進入MySQL

1.標準的INSERT語法
INSERT INTO `dbname`.`tablename` (`column1`, `column2`)  VALUE (' val1' , 'val2') ;

2. val1加入單引號( ' ),變成val'1
INSERT INTO `dbname`.`tablename` (`column1`, `column2`)  VALUE (' val\'1' , 'val2') ;
-- 紅色的部份,就是要告訴你,打一個反斜線,就可以插入單引號

3.用StringBuilder儲存有單引號( ' )的語法
StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO `dbname`.`tablename` (`column1`, `column2`)  VALUE (' val\\'1' , 'val2') ;");
//紅色的部份,就是要告訴你,打兩個反斜線,才可以插入單引號

原因:因為在MySQL跟C#裡面,反斜線都是溢出符號;所以想在C#裡面插入溢出符號 \ 到字串中,就要打\\

Delegate在C#中,是幹麼用的?

// A simple delegate example. 
   
using System;
   
// Declare a delegate. 
delegate string strMod(string str);
   
class DelegateTest {
  // Replaces spaces with hyphens.
  static string replaceSpaces(string a) {
    Console.WriteLine("Replaces spaces with hyphens.");
    return a.Replace(' ', '-');
  } 
   
  // Remove spaces.
  static string removeSpaces(string a) {
    string temp = "";
    int i;
   
    Console.WriteLine("Removing spaces.");
    for(i=0; i < a.Length; i++)
      if(a[i] != ' ') temp += a[i];
   
    return temp;
  } 
   
  // Reverse a string.
  static string reverse(string a) {
    string temp = "";
    int i, j;
   
    Console.WriteLine("Reversing string.");
    for(j=0, i=a.Length-1; i >= 0; i--, j++)
      temp += a[i];
   
    return temp;
  }
    
  public static void Main() { 
    // Construct a delegate.
    strMod strOp = new strMod(replaceSpaces);
    string str;
/* 
注意這邊,replaceSpaces這個function被當成strMod的參數傳進來,
這樣就完成委派,之後對strOp傳參數進去,就等同於對replaceSpaces傳參數
*/
   
    // Call methods through the delegate.
    str = strOp("This is a test.");
/*
所以當strOp在這邊傳入This is a test.的時候,相當於replaceSpaces("This is a test.")
會輸出 Resulting string: This-is-a-test.
*/
    Console.WriteLine("Resulting string: " + str);
    Console.WriteLine();
     
    strOp = new strMod(removeSpaces);
/* 現在又改註冊removeSpaces這個function */

    str = strOp("This is a test.");
    Console.WriteLine("Resulting string: " + str);
/* 會輸出 Resulting string: Thisisatest. */
    Console.WriteLine();
   
    strOp = new strMod(reverse);
    str = strOp("This is a test.");
    Console.WriteLine("Resulting string: " + str);
  }
}

The output from the program is shown here:

Replaces spaces with hyphens.
Resulting string: This-is-a-test.
   
Removing spaces.
Resulting string: Thisisatest.
   
Reversing string.
Resulting string: .tset a si sihT

參考書目
C#: The Complete Reference
by Herbert Schildt 
McGraw-Hill/Osborne © 2002 (933 pages) Citation
ISBN:9780072134858
Learn all aspects of the C# programming language that support the .NET Framework with this all-inclusive guide.
chapter 15 : Delegates and Events

[比較] Array

1.JS的Array是一種物件,所以他的陣列可以用索引(index)或是設定的id來呼叫。
ex: aryK[1]["name"]。

JS的Array物件,也可以建立多維陣列。

2.VBS的Array是一種函數,可以建立多維陣列,但是只能使用陣列引數(索引, index)來呼叫。ex: A(3)(4)
  如果要用設定的id來呼叫,就得利用Dictionary物件

[注意事項]同時使用jscript和vbscript建立ASP程式

1. 程式區塊的宣告:
  因為預設的ASP語法是VBScript,所以每一個.asp檔的開頭都會寫
<%@Language = VBScript%>

如果你硬要在預設為VBScript語法的ASP使用JScript,請愛用以下的區段
 <Script Language = "JScript", Runat = "Server">
 </Script>
將JScript程式碼寫在其中,這樣會好很多

2. Response.End的能力
  假設預設語言是VBScript。

  你在VBScript的區段下Response.End,他會終止全部的動作,也就是說server端script程式與client端的html語法都會停下來。

  但是如果寫在JScript的區段中,只有server端的script程式停下來,html語法還是會繼續跑完。(這只是觀察到的現象而已。)

Test

GO
GO
GO
GO
GO
GO