星期二, 5月 17, 2016

[C#] 將參數值從 runtimemethodinfo 轉換為 string 失敗

設計 Global Exception Handler 時,希望能把 Exception 放進 DB 內,撰寫 ADO.NET 語法要把相關資訊存進去
public void Exception2DB(Exception ex)
{
    using (SqlConnection Conn = new SqlConnection(ConnectionString))
    {
        try
        {
            SqlCommand cmd = new SqlCommand("dmlException2DBI", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@ExceptionTime", SqlDbType.DateTime).Value = DateTime.Now.ToString();
            cmd.Parameters.Add("@Source", SqlDbType.Char, 100).Value = ex.Source;
            cmd.Parameters.Add("@TargetSize", SqlDbType.Char, 100).Value = ex.TargetSite;
            cmd.Parameters.Add("@Message", SqlDbType.NChar, 100).Value = ex.Message;
            cmd.Parameters.Add("@StackTrace", SqlDbType.VarChar, 1000).Value = ex.StackTrace;

            Conn.Open()
            cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message , "錯誤" , MessageBoxButtons.OK , MessageBoxIcon.Error);
    }
}
該語法一直發生錯誤,錯誤如下圖

[C#] 將參數值從 runtimemethodinfo 轉換為 string 失敗

一個參數一個參數拿掉來測試,才發現 Exception.TargetSite 是回傳 MethodBase,根本就不是 string,Orz
cmd.Parameters.Add("@TargetSize", SqlDbType.Char, 100).Value = ex.TargetSite;
-- 改為
cmd.Parameters.Add("@TargetSize", SqlDbType.Char, 100).Value = ex.TargetSite.Name;

沒有留言:

張貼留言