2015-03-31 63 views
1

是否有可能精確地記錄SqlDataAdapter在mysql數據庫上執行的每個語句,而在C#中使用.Update()方法?記錄SqlDataAdapter的每個語句C#

(無需使用SQLProfiler或任何其他第三方PROGRAMM,但純粹的C#代碼)

+0

_「記錄完全每個單獨的陳述」_什麼樣的陳述? – 2015-03-31 12:01:57

+0

@Tim Schmelter帶有所有參數的INSERT,DELETE和UPDATE語句 – hYde 2015-03-31 12:03:57

+0

您想在哪裏登錄?文件系統?數據庫中的審計表?如果後者你可以隨時添加一個觸發器到你的表。 – BDH 2015-03-31 12:14:58

回答

2

這是我解決我的問題的方式,我以爲我會分享給任何尋找想法的人。

#region generate SQL Update Script 
    static void da_RowUpdating(object sender, SqlRowUpdatingEventArgs e) 
    { 
     string sqlCommand = e.Command.CommandText; 

     for (int i = 0; i < sqlCommand.Length; i++) 
     { 
      string substring = ""; 
      string paramvalue = ""; 

      int check = 0; 
      int index = 0; 

      substring = sqlCommand.Substring(i, 1); 
      if (substring == "@") 
      { 
       if (Int32.TryParse(sqlCommand.Substring(i + 3, 1), out check)) 
       { 
        index = Convert.ToInt32(sqlCommand.Substring(i + 2, 2)); 
        paramvalue = e.Command.Parameters[Convert.ToInt32(sqlCommand.Substring(i + 2, 2)) - 1].Value.ToString(); 
        sqlCommand = sqlCommand.Remove(i, 4); 
       } 
       else 
       { 
        index = Convert.ToInt32(sqlCommand.Substring(i + 2, 1)); 
        paramvalue = e.Command.Parameters[index - 1].Value.ToString(); 
        sqlCommand = sqlCommand.Remove(i, 3); 
       } 
       sqlCommand = sqlCommand.Insert(i, paramvalue); 
      } 
     } 
     sw.WriteLine(sqlCommand); 
     sw.Flush(); 
    } 
    #endregion generate SQL Update Script 
2

,你可以像handle the DataAdapter eventsRowUpdatingRowUpdated

因此,對於你MySql數據庫:

void OnRowUpdated(object sender, MySqlRowUpdatedEventArgs args) 
{ 
    string sql = args.Command.CommandText; 
    bool isStoredProcedure = args.Command.CommandType == CommandType.StoredProcedure; 
    foreach (MySql.Data.MySqlClient.MySqlParameter p in args.Command.Parameters) 
    { 
     string paramName = p.ParameterName; 
     DbType dbType = p.DbType; 
     MySqlDbType dbType2 = p.MySqlDbType; 
     object value = p.Value; 
    } 
} 

這些事件被觸發爲每一個被插入,更新或刪除的行。