2013-08-06 3 views
0

매개 변수 바인딩 후 C#의 ODBC에서 구문 분석 된 쿼리를 어떻게 인쇄 할 수 있습니까? 당신이 매개 변수 값으로 paramater 이름을 대체하는 확장 기능을 쓸 수 있도록 기본적으로 불가능하다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

: 이 샘플 코드입니다.

예를 들어

:

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

감사합니다,하지만 내가 필요하지 않습니다 : S 첫 번째 예제와 함께 내가 ODBC 유형에 대한 모든 경우를 삽입해야하고, 두 번째는 쿼리 난으로 인해 작동하지 않을 수 있기 때문에 질문 마커 만 "?", "@ID"와 같은 필드 별칭이 없습니다. – pava91

+0

나는 당신이 의미하는 바를 알고, 그것이 당신을 더 도울 수 있기를 바랍니다. –

+0

나는 그것을 시험해 본다! – pava91

관련 문제