2008年3月29日 星期六

memo

//private void keyHook_KeyDown(object sender, KeyEventArgs e) private void queryCB_KeyDown(object sender, KeyEventArgs e) {
if (e.Control == true && e.KeyCode == Keys.C) { Clipboard.SetText(queryCB.SelectedText); e.Handled = false; e.SuppressKeyPress = true; return; } else if (e.Control == true && e.KeyCode == Keys.V) { queryCB.Text = Clipboard.GetText(); e.Handled = false; e.SuppressKeyPress = true; return; }
switch (e.KeyCode) { case Keys.RShiftKey: enabledBU_Click(this, new EventArgs()); break; case Keys.Enter: e.Handled = false; e.SuppressKeyPress = true; if(queryCB.Text.Trim().Length >0) beginQueryBU_ButtonClick(this, new EventArgs()); break; case Keys.BrowserBack: e.Handled = false; e.SuppressKeyPress = true; break; case Keys.Back: e.Handled = false; e.SuppressKeyPress = true; if (queryCB.Text.Length > 0) { try { int sLength = queryCB.SelectionLength == 0 ? 1 : queryCB.SelectionLength; int position = queryCB.SelectionLength == 0 ? queryCB.SelectionStart - 1 : queryCB.Text.IndexOf(queryCB.SelectedText); queryCB.Text = queryCB.Text.Remove(position, sLength); queryCB.SelectionStart = position > queryCB.Text.Length ? queryCB.Text.Length : position; queryCB.SelectionLength = 0; queryCB.Select(); } catch { } } break; case Keys.Delete: e.Handled = false; e.SuppressKeyPress = true; if (queryCB.Text.Length > 0 && queryCB.SelectionStart < slength =" queryCB.SelectionLength" position =" queryCB.SelectionStart;" text =" queryCB.Text.Remove(position," selectionstart =" position"> queryCB.Text.Length ? queryCB.Text.Length : position; queryCB.SelectionLength = 0; queryCB.Select(); } break; case Keys.Left: e.Handled = false; e.SuppressKeyPress = true; queryCB.SelectionLength = 0; if (queryCB.SelectionStart > 0) queryCB.SelectionStart = queryCB.SelectionStart - 1; break; case Keys.Right: e.Handled = false; e.SuppressKeyPress = true; queryCB.SelectionLength = 0; if (queryCB.SelectionStart < queryCB.Text.Length) queryCB.SelectionStart = queryCB.SelectionStart + 1; break; case Keys.Down: e.Handled = false; e.SuppressKeyPress = true; break; default: e.Handled = false; e.SuppressKeyPress = true; break; } }

2008年3月24日 星期一

如何將COM元件轉成.Net可以參考的DLL元件

COM COM+是微軟早期開發的元件,數量不在少數,如何引用這些COM元件。
本文以SHDOCVW.DLL這顆元件為例說明如何在.NET開發環境中引用參考:
首先請找到:SN.EXE(C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin)
接著產生一組新的金鑰組並將它寫入指定的檔案。
語法如下:
sn -k trObject.snk
然後利用tlbIMP.exe工具程式,將 COM 型別程式庫中的型別定義轉換為 Common Language Runtime 組件中的等效定義。
語法如下:
tlbimp c:\windows\system32\shdocvw.dll /out:c:\temp\Interop.shdocvw.dll /keyfile:trObject.snk /namespace:ShDocVw
如此就可以產生一顆含有強勢名稱的元件了。

2008年3月13日 星期四

DataTable的序列化和反序列化

來源網址:http://www.cnblogs.com/moonspell/archive/2007/07/17/821201.html
///
/// 序列化DataTable
///

/// DataTable
/// 序列化的DataTable
private static string SerializeDataTableXml(DataTable pDt) {
// 序列化DataTable
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
serializer.Serialize(writer, pDt);
writer.Close();
return sb.ToString();
}

///
/// 反序列化DataTable
///

/// 序列化的DataTable
/// DataTable
public static DataTable DeserializeDataTable(string pXml) {

StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));

DataTable dt = serializer.Deserialize(xmlReader) as DataTable;

return dt;
}

2008年3月11日 星期二

Ajax Serialization Converters

(jsonserialization)
(converters)
(add type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview" name="DataSetConverter")
(add type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview" name="DataRowConverter")
(add type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview" name="DataTableConverter")
(/converters)
(/jsonserialization)

2008年2月2日 星期六

共享軟體使用協議範例

XXXX是一款共享軟體。作者享有一切權利。 您可以自由使用、複製、傳播、發布此軟體的未註冊版;未經作者書面認可,任何人不得作任何修改或用於商業用途。違者作者將追究其最大責任。

  請仔細閱讀以下使用許可,如果您不同意以下任何一點,請立即停止使用此軟體:

1.本軟體產品的版權歸XXXXX所有,受到適用版權法及其他知識產權法及條約的保護。
2.軟體作者XXXXXX授予您對此版本的最終用戶使用許可權。
3.擔保責任:使用本軟體產品是您在充分了解本軟體特性基礎上進行的,故由您自已承擔使用本軟體可能造成的風險。在適用法律所許可的最大範圍內,作者不承認任何明示或默示的擔保或條件。
4.無賠償責任:使用本軟體產品是您在充分了解本軟體特性基礎上進行的,故由您自已承擔使用本軟體可能造成的損失。在適用法律所許可的最大範圍內,作者不承擔使用此軟體版本所造成的任何損失。
5.您不能對此軟體作任何的軟體反向工程,如反匯編,跟蹤等。
6.您可以自由使用、複製、傳播、發布此軟體的未注冊版,但未徵得作者同意的情況下,您不能收取任何費用或用於商業目的,如銷售,捆綁,集成等。同時,必須保証所分發的軟體包含全部檔案,并且未作任何修改。
7.你可以長期使用本軟體的未註冊版,但是生成的錄影檔案中會有“未註冊”等字樣。

您一旦傳播、安裝、複製或以其它方式使用《螢幕錄影專家》,即表示您同意接受以上各項條件的約束。如您不同意以上條件的約束,請不要傳播、安裝或使用該軟體。

公司資訊
連絡電話、網址

2008年1月9日 星期三

將ANSI編碼的文字轉為Unicode

source 來源:啟隆
Response.Write(Util.Big52Unicode(tt));
///
/// ANSI轉Unicode
///

///
///
public static string Big52Unicode(string str)
{
new Regex("&#(?[^;]+)", RegexOptions.IgnoreCase);
Match mc = re.Match(str);
while (mc.Success)
{
int S = Convert.ToInt32(mc.Result("${pp}"));
string newS = Char.ConvertFromUtf32(S);
//HttpContext.Current.Response.Write(Char.ConvertFromUtf32(S) +
"
");
str = str.Replace("&#" + S + ";", newS);
mc = mc.NextMatch();
}

return str;
}

完整備份SQLServer

http://www.sqldbatips.com/showarticle.asp?ID=37

using Microsoft.SqlServer.Management.Smo;

namespace SMOTest
{
class Program
{
static void Main()
{
Server svr = new Server();
Backup bkp = new Backup();
bkp.Devices.AddDevice(@"C:\SMOTest.bak", DeviceType.File);
bkp.Database = "SMO";
bkp.Action = BackupActionType.Database;
bkp.Initialize = true;
bkp.PercentCompleteNotification = 10;
bkp.PercentComplete += new PercentCompleteEventHandler(bkp_PercentComplete);
bkp.SqlBackup(svr);
}

static void bkp_PercentComplete(object sender, PercentCompleteEventArgs e)
{
Console.WriteLine(e.Percent.ToString() + "% backed up");
}
}
}