0

データベースに保存したいセッションリストに保存されたテキストがあります。現在、resultは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を使用することをお勧めします( EntityFrameworkはMSDNORM 、またはこれを行う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);

他の人が示唆しているように、パラメータ化されたクエリを使用する方が安全であるため、そのルートを選択する場合は、の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));
于 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 に答える