0
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();
}
4

2 に答える 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.TextSQL文字列に含める前に、完全にサニタイズしてください。また、insert文字列については、テーブル名を[and]ではなく'andで囲む必要があり'ます。

注:考慮すべき重要な点の 1 つは、何を達成しようとしているのかということです。あなたが何を求めているにせよ、N個の名の入力に対して単一の行を持つN個のテーブルが良い設計であるというシナリオは本当に想像できません。

于 2013-03-10T18:31:18.067 に答える