private void Save_rec_Click(object sender, EventArgs e)
{
string pattern = ("[\\s]+");
string input = firstname.Text;
string replacement = "_";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
msg.Text = result;
cmd = new SqlCeCommand("create table " + result + "(id int, first_name nVarChar(100))", con);
cmd.ExecuteNonQuery();
cmd = new SqlCeCommand("insert into '"+ result +"' values(1,'" + firstname.Text + "')", con);
cmd.ExecuteNonQuery();
}
質問する
779 次
2 に答える
0
特に .NET では非常に簡単であるため、これについてはあまり説明できません。次のように SqlCommand パラメーターを使用して、SQL インジェクションの発生を防ぐだけです。
string strUserInput = TextBox1.Text;
SqlCommand sqlComm = new SqlCommand();
sqlComm.CommandText = "SELECT SomeColumn FROM Table WHERE Name = @ParamName";
SqlParameter param = cmd.Parameters.Add("@ParamName", strUserInput);
于 2013-03-10T19:16:46.593 に答える
0
これはどちらかというとコメントですが、コメントだけが許可されているスペースには対処すべきことが多すぎます。まず、このコードのエンドユーザーは誰ですか? それは純粋に内部的なもので、厳密に制限されていますか? SQL インジェクション攻撃にさらされているためです。
つまり、必要な操作 (テーブルを作成し、そのテーブルに 1 つの行を挿入する) を実行するように見えますが、上記のように動的 SQL を使用して実行する必要があります。firstname.Text
SQL文字列に含める前に、完全にサニタイズしてください。また、insert
文字列については、テーブル名を[
and]
ではなく'
andで囲む必要があり'
ます。
注:考慮すべき重要な点の 1 つは、何を達成しようとしているのかということです。あなたが何を求めているにせよ、N個の名の入力に対して単一の行を持つN個のテーブルが良い設計であるというシナリオは本当に想像できません。
于 2013-03-10T18:31:18.067 に答える