从列表创建查询字符串
本文关键字:字符串 查询 创建 列表 | 更新日期: 2023-09-27 18:31:52
我在会话列表中有一些保存的文本,我想将其保存在数据库中。现在结果包含 4 个不同的字符串。
List<string> result = (List<string>)HttpContext.Current.Session["Application"];
foreach (string element in result)
{
//produce a query string?
}
我正在使用oracle数据库和其他插入的查询字符串,例如:
string sql = "insert into JOBQUESTIONS (JOBAPPLICATIONID, QUESTIONTEXT, TYPEID, HASCORRECTANSWER, CORRECTANSWER, ISREQUIRED) VALUES (" + JobID + ", ''" + QuestionText + "'', " + TypeID + ", " + HasCorrectAnswer + ", ''" + CorrectAnswer + "'', " + IsRequired + ")";
RunQuery(sql);
因此,我需要创建一组值。但是请记住,这些都是字符串,所以我需要像:'''" + CorrectAnswer + "''' 用于所有字符串条目,否则它不会添加到数据库中。
我可以使用字符串生成器吗?如果是这样,怎么办?
为什么要
构建一个SQL字符串(这让你打开了SQL注入)?我建议要么使用ORM(实体框架是MSDN ORM,要么使用sproc来执行此操作(并使用SqlParameters)。或者,至少您应该使用参数化字符串,而不是直接推送值
var parameterizedQuery = new SqlCommand(
"INSERT INTO JOBQUESTIONS (JOBAPPLICATIONID,
QUESTIONTEXT, TYPEID, HASCORRECTANSWER, CORRECTANSWER, ISREQUIRED)
VALUES (@JobId, '@QuestionText', @TypeID , @HasCorrectAnswer , '@CorrectAnswer',
@IsRequired)");
parameterizedQuery.Parameters.Add("@JobId", SqlDbType.Int).Value = 123;
尝试这样的事情:
var parms = string.Join(",", lst.Select(str => string.Format("'{0}'", str)));
var values = string.Format("VALUES({0})", parms);
正如其他人所建议的那样,使用参数化查询会更好、更安全,因此如果您选择走这条路,我会考虑切换到Dictionary
而不是List
。
var dict = new Dictionary<string, string>();
dict.Add("Foo", "Bar"); //parameter name, value
dict.Add("Bar", "Foo"); //...
dict.Select(d => cmd.Parameters.AddWithValue(string.Format("@{0}", d.Key), d.Value));
使用参数化查询。这意味着您只在 sql 查询中插入一些临时名称,例如
"INSERT INTO tablename VALUEs(@param1, @param2, ...)";
然后定义参数:
cmd.Parameters.Add("@param1", SqlDbType.Int).Value = your actual value";