[英]Parameterized SQL in FROM clause
使用OleDbCommand
。 我可以添加SQL參數,從而使查詢免受SQL注入的影響,但是有一種方法可以在FROM
聚類中做到這一點。
這項工作
query = "Select * From Company Where @param = 1";
OleDbCommand Command = new OleDbCommand(query, sqlConnStr);
DataTable Table = new DataTable();
DataSet dataSet = new DataSet();
Table = null;
//Add Parameters
Command.Parameters.AddWithValue("param", "ID");
Command.ExecuteNonQuery();
adapter.SelectCommand = Command;
adapter.Fill(dataSet);
Table = dataSet.Tables[0];
它返回一個帶有漂亮行的漂亮表,其中id = 1
但
我正在尋找這樣的東西,請注意FROM條款
query = "Select * From @tableName Where @param = 1";
OleDbCommand Command = new OleDbCommand(query, sqlConnStr);
DataTable Table = new DataTable();
DataSet dataSet = new DataSet();
Table = null;
//Add Parameters
Command.Parameters.AddWithValue("param", "ID");
Command.Parameters.AddWithValue("tableName", "Company");
Command.ExecuteNonQuery();
adapter.SelectCommand = Command;
adapter.Fill(dataSet);
Table = dataSet.Tables[0];
DBMS不斷返回"Error in From clause"
PS一切拼寫正確-我三重檢查
所有人-謝謝,但是我會堅持使用參數化SQL。 我不喜歡Dynamic SQL
One BIT
您必須執行一個動態串聯的SQL字符串,不幸的是,這將損害參數化SQL給您提供的任何好處。 看到這篇文章 。
DECLARE @SQL varchar(250)
SELECT @SQL = 'Select * From ' + @TableName + ' Where ' + @param + ' = 1'
Exec(@SQL)
如果您可以通過其他方式預先確定表名,則不建議這樣做。
SQL不支持對FROM子句進行參數化。 您無法按照嘗試的方式進行操作。 可能您可以這樣做:
query = "Select * From" + tableName + "Where @param = 1";
您不能使用參數化的對象名稱。 你將不得不做這樣的事情
string.format("SELECT * FROM [{0}] WHERE [{1}] = 1", tableName, columnName);
自行承擔責任
可能值得檢查輸入中的方括號,這是我目前可以考慮“注入”以上示例的唯一方法。 我不是黑客,也不精通sql注入。 這樣的事情可能會起作用:
if (tableName.Contains("]"))
{
throw new ArgumentException();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.