我有一個項目正在工作,我沒有創建。作爲一個整體,我對C#和ASP.NET還比較陌生。我正在面對這個SQL查詢:如何在C#中使用變量數據SQL查詢字符串
var sql = @"SELECT * FROM [database] WHERE [submitDate] >= Convert(datetime,'20130301')";
var sql = @"SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY id)AS rowNum, * FROM [webDBs].[dbo].[employeeRecognition] WHERE [submitDate] >= Convert(datetime,'20130301')
) AS E
WHERE rowNum >= {0}
AND rowNum < {1}";
這些當然的行爲完全符合預期。然而,我需要做的是讓Convert(datetime,'20130301')
位的2013部分實際上等於當前值,這樣我們就不必每隔一年更新一次這個查詢。
根據我有限的經驗,我嘗試在C#變量中進行連接,不僅沒有工作,而且在經過一些研究之後,我發現該方法可能是潛在的SQL注入開放。
我讀了一些關於參數化SQL查詢的內容,但是我看到的所有內容都讓我相信我必須首先重寫/重新思考數據如何從數據庫中提取。
有關如何完成我的目標的任何建議?
這裏就是我的工作:
protected string RecordCount()
{
EmployeeRecognitionDataContext db = new EmployeeRecognitionDataContext();
var sql = @"SELECT * FROM [database] WHERE [submitDate] >= Convert(datetime,'20130301')";
var query = db.ExecuteQuery<employeeRecognition>(sql);
//return "[{\"count\":\"" + query.Count() + "\"}]";
return query.Count().ToString();
}
功能的第二var
正在使用中:
protected string SelectRecords(int startIndex, int pageSize) {
int rowNum = startIndex + pageSize;
EmployeeRecognitionDataContext db = new EmployeeRecognitionDataContext();
var sql = @"SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY id)AS rowNum, * FROM [database] WHERE [submitDate] >= Convert(datetime,'20130301')
) AS E
WHERE rowNum >= {0}
AND rowNum < {1}";
var query = db.ExecuteQuery<employeeRecognition>(sql, startIndex, rowNum);
List<Employee> eList = new List<Employee>();
foreach (var employee in query)
{
eList.Add(new Employee {
value = employee.id.ToString(),
firstName = employee.firstName,
lastName = employee.lastName,
department = employee.department,
drop = employee.shortAchievement,
recognition = employee.longAchievement,
submitDate = employee.submitDate.ToString()
});
}
JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
return serializer.Serialize(eList);
}
你有什麼問題與參數?參數是正確的方法。 (或者在SQL中完成) – SLaks
問題始於我不知道如何正確地向這個特定的字符串添加參數。我發現這樣做的方法是將'Parameter.Add'顯示爲在SQL查詢只是一個字符串的特定實例中似乎不起作用的方法。 – TXChetG