顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2015年2月13日 星期五

[※注意!!]使用.Net 寄送郵件中文附件檔名亂碼問題

使用.NET寄發信件時,夾帶之中文附件檔名會亂碼。

原因:.NET Framework 4的問題(Bug)
解決方案:
將專案的「目標Framework(G)」改為.NET Framework 3.5以下或.NET Framework 4.5以上

微軟說明-徵狀:
請考慮下列情況:
    ●您執行的 Microsoft.NET Framework 4 編譯的應用程式。
    ●應用程式呼叫System.Net.SmtpClient類別,以傳送電子郵件訊息,並使用附件類別來將檔案附加到郵件訊息物件。
    ●附件名稱包含非 ASCII 字元,且為超過 41 utf-8 編碼的位元組。
   
在這個案例中,附件名稱意外前已經編碼兩次傳輸。然後,電子郵件訊息收件者附件中尋找被截斷的編碼的名稱,但不是原始的名稱。

微軟說明-發生的原因:
之所以發生這個問題,是因為在.NET Framework 4 的問題。包含正確摺疊每行長度限制的 RFC 標準重新寫入SMTP編碼方式。這種行為插入其他歸位換行(CRLF)字元的名稱字串太長時的回復線。這些額外的控制字元會導致要重新編碼的附件名稱。

參考網站: http://support.microsoft.com/kb/2402064

2015年1月8日 星期四

C# 使用ADO.NET連Sybase時發生Unable to load DLL 'sybdrvado11.dll'

C# 使用ADO.NET連Sybase時發生Unable to load DLL 'sybdrvado11.dll'錯誤。

雖然程式執行目錄中有下列三個DLL:
Sybase.Data.AseClient.dll
sybdrvado11.dll
sybdrvssl.dll

會出現 Unable to load DLL 'sybdrvado11.dll'錯誤,可能是主機遺失msvcp71.dll、msvcr71.dll兩個檔案(C runtime),所以只要將這兩個DLL複製至執行目錄即可。

2012年1月18日 星期三

C# sybase資料庫交易

C# sybase資料庫交易的寫法如下:
using Sybase.Data.AseClient;


AseConnection aseCon;
AseCommand dcom;

aseCon = new AseConnection(
"DataSource=127.0.0.1;Port=5000;Database=資料庫;UID=帳號;PWD=密碼;charset=utf8");
aseCon.Open();
//開啟資料庫交易
AseTransaction aseTransaction = aseCon.BeginTransaction();
dcom = new AseCommand();
dcom.Connection = aseCon;
dcom.Transaction = aseTransaction;

try
{
    //insert bank

   dcom.CommandText = "INSERT INTO bank1 VALUES('5555555', 0)";
   dcom.ExecuteNonQuery();
   dcom.CommandText = "INSERT INTO bank2 VALUES('5555555', 0)";
   dcom.ExecuteNonQuery();

    //執行成功時Commit
    aseTransaction.Commit();
}
catch (Exception err)
{
   //執行失敗時Rollback
   aseTransaction.Rollback();
   MessageBox.Show(err.Message);
}
aseCon.Close();

2011年3月1日 星期二

C# 連Sybase設定

C#連Sybase的方法:(目前只用過ADO.NET)
一、ADO.NET(用Sybase.Data.AseClient 連接)
1. 須先安裝sybase open client軟體(執行端也須安裝),安裝時請加選ADO.NET。

2. 至C:\sybase\ADO.NET\dll目錄中把Sybase.Data.AseClient.dll    sybdrvado11.dll sybdrvssl.dll三個文件Copy到bin資料夾中,並在參考中加入Sybase.Data.AseClient.dll 。

3. 使用範例
using Sybase.Data.AseClient;

AseConnection aseCon ;
aseCon = new AseConnection("DataSource=127.0.0.1;Port=5000;Database=資料庫;UID=帳號;PWD=密碼;charset=utf8");
aseCon.Open();
AseCommand dcom = new AseCommand("SELECT name FROM student", aseCon);
AseDataReader dr = dcom.ExecuteReader();
dr.Read();
Console.WriteLine("name : " + dr[0].ToString());
dr.Close();
aseCon.Close();