0

我在会话列表中有一些保存的文本,我想保存在数据库中。目前,结果包含 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 + "\' 用于所有字符串条目,否则它不会添加到数据库中。

我可以使用字符串生成器吗?如果有怎么办?

4

3 回答 3

3

你为什么要构建一个 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;
于 2012-04-20T17:53:25.593 回答
2

尝试这样的事情:

var parms = string.Join(",", lst.Select(str => string.Format("'{0}'", str)));

var values = string.Format("VALUES({0})", parms);

正如其他人所建议的那样,使用参数化查询会更好更安全,所以如果你选择走那条路,我会考虑切换到 aDictionary而不是 a 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));
于 2012-04-20T18:10:55.867 回答
1

使用参数化查询。这意味着您只在 sql 查询中插入一些临时名称,例如

"INSERT INTO tablename VALUEs(@param1, @param2, ...)";

然后定义参数:

cmd.Parameters.Add("@param1", SqlDbType.Int).Value = your actual value";
于 2012-04-20T17:56:02.357 回答