,默認情況下是不可能的,所以你可以寫一個擴展,與參數值替換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();
}
}
謝謝,但不是我所需要的:是因爲與第一例子,我需要插入所有案件的ODBC類型和第二不能工作,因爲到查詢我只有問號「?」,我沒有像「@ID」這樣的字段別名。 – pava91
我明白你的意思,我更新了樣本希望它可以幫助你進一步。 –
我嘗試過,謝謝! – pava91