2013-08-06 75 views
0

如何在參數綁定後打印從C#中的ODBC解析的查詢? 這是示例代碼:如何從C#中的ODBC獲取參數查詢#

cmd.CommandText = "SELECT * from user WHERE id = ?"; 
cmd.Prepare(); 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 2; 
OdbcDataReader reader = cmd.ExecuteReader(); 
string query = cmd.????; // Here i need a method for get a full query 

回答

4

,默認情況下是不可能的,所以你可以寫一個擴展,與參數值替換paramater名。

例如:

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     OdbcConnection connection = new OdbcConnection(""); 
     OdbcCommand command = new OdbcCommand("SELECT * FROM Table WHERE Id = ? AND Column = ?", connection); 
     command.Parameters.Add("@id", OdbcType.Int).Value = 2; 
     command.Parameters.Add("@text", OdbcType.VarChar).Value = "test"; 

     string preparedSql = command.GetPreparedSql(); 
     // preparedSql = 
     Console.ReadLine(); 
    } 
} 

public static class OdbcExtensions 
{ 
    public static string GetPreparedSql(this OdbcCommand command) 
    { 
     string[] splitted = command.CommandText.Split(new[] {'?'}, StringSplitOptions.RemoveEmptyEntries); 
     StringBuilder builder = new StringBuilder(); 

     for (int i = 0; i < splitted.Length; i++) 
     { 
      builder.Append(splitted[i]); 

      OdbcParameter param = command.Parameters[i]; 

      switch (param.DbType) 
      { 
       case DbType.Boolean: 
        builder.Append(Convert.ToBoolean(param.Value) ? "1" : "0"); 
        break; 
       case DbType.AnsiString: 
        builder.AppendFormat("'{0}'", param.Value); 
        break; 
       default: 
        builder.Append(param.Value); 
        break; 
      } 

      builder.Append(" "); 
     } 

     return builder.ToString(); 
    } 
} 
+0

謝謝,但不是我所需要的:是因爲與第一例子,我需要插入所有案件的ODBC類型和第二不能工作,因爲到查詢我只有問號「?」,我沒有像「@ID」這樣的字段別名。 – pava91

+0

我明白你的意思,我更新了樣本希望它可以幫助你進一步。 –

+0

我嘗試過,謝謝! – pava91