2015-11-03 69 views
0

我想查看我將要執行的命令的文本版本,該命令是使用parameters.add創建的 - 有沒有辦法做到這一點? (見下面註釋線)在執行之前是否可以看到NpgSqlCommand的「文本」版本?

NpgsqlConnection conn = new NpgsqlConnection(connstring); 
    conn.Open(); 
    NpgsqlCommand cmd = new NpgsqlCommand("insert into \"Min_Bar_Price_Data\" values(:SEC_ID, :PX_OPEN, :PX_HIGH, :PX_LOW, :PX_LAST, :PX_VOLUME, :Date)", conn); 


cmd.Parameters.Add(new NpgsqlParameter("SEC_ID", DbType.Int32)); 
cmd.Parameters.Add(new NpgsqlParameter("PX_OPEN", DbType.Double)); 
cmd.Parameters.Add(new NpgsqlParameter("PX_HIGH", DbType.Double)); 
cmd.Parameters.Add(new NpgsqlParameter("PX_LOW", DbType.Double)); 
cmd.Parameters.Add(new NpgsqlParameter("PX_LAST", DbType.Double)); 
cmd.Parameters.Add(new NpgsqlParameter("PX_VOLUME", DbType.Double)); 
cmd.Parameters.Add(new NpgsqlParameter("Date", DbType.DateTime)); 


    cmd.Parameters["SEC_ID"].Value = sec_ID; 
    cmd.Parameters["PX_OPEN"].Value = 0.0; 
    cmd.Parameters["PX_HIGH"].Value = 0.0; 
    cmd.Parameters["PX_LOW"].Value = 0.0; 
    cmd.Parameters["PX_LAST"].Value = d.Close; 
    cmd.Parameters["PX_VOLUME"].Value = 1.0; 
    cmd.Parameters["Date"].Value = d.DT; 

//Console.WriteLine("Created命令:「+ CMD ????);

cmd.ExecuteNonQuery(); 

回答

0

prepared statements整個想法是,參數發送out-of-band,而不是被「取代的」到SQL語句。這是爲了防止SQL注入攻擊和優化目的。

如果僅僅爲了調試的目的,你可以替換手動適當的值參數名稱,用一個簡單的正則表達式。

+0

我明白這一點。我問的原因是我想準備一個具有多個值的插入語句。但我想使用「參數」來確保我發送正確的值。 – ManInMoon

+0

正如@ anton-gogolev所說,參數不會被替換到您的查詢中 - 在任何時候都不會有包含所有參數的字符串。 Npgsql 3.0.4(尚未發佈)將提供SQL日誌記錄功能 - 包括參數 - 可以幫助你(參見https://github.com/npgsql/npgsql/issues/839)。但是,它會記錄所有語句,而不僅僅是您想要的語句。 –

相關問題