0
我在OleDb中用作參數的表名有問題。當我看到類似問題的論壇時,我發現實際上不可能以這種方式使用參數。但是這個問題沒有得到解決。當然,我可以使用實際的表名,但有很多,所以分開處理必要的表更容易。我試圖使用動態SQL只是字符串連接,這會導致SQL注入問題。所以,這裏是我的代碼C#OleDb中的參數化查詢。不完整的查詢問題
foreach (String Data in tablelist)
{
if (Data == "Harvard")
{
cmd.Parameters.Add("@tablename", OleDbType.Char);
cmd.Parameters["@tablename"].Value = Data;
cmd1.Parameters.AddWithValue("@University", Data);
cmd.CommandText = "insert into @tablename ([Firstname],[Lastname]) values (?,?)";
}
}
既然我不能使用INSERT INTO參數哪個命令我應該使用沒有陷入困境的命令語句。這個難題如何克服?在此先感謝
你從哪裏得到的表名?如果你提供了一個名字白名單,用戶可以選擇,而沒有任何編輯的可能性,那麼基於惡意用戶輸入你可以很安全地使用Sql Injection。因此,您可以在此上下文中使用字符串連接 – Steve
您不能在sql中參數化標識符。即使可以,您的代碼也會導致任何不包含FirstName和LastName列的表的異常。事實上,你的問題中的代碼根本沒有意義 - 你的表名是硬編碼的,但你試着用命名參數來使用它(儘管OleDb不支持命名參數),而你將相同的數據插入兩個參數。 –
感謝您的澄清。你的意思是用戶編輯名字的可能性。據我所知,處理它的唯一方法是使用字符串連接使用名稱的白名單。就我而言,用戶只需從列表中選擇表名(實際上是從組合框中選擇),然後代碼就可以對其進行處理。 @Steve – PeterEliot