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();
}
答案 0 :(得分:0)
这更像是一个评论,但在允许评论的空间中要解决的问题太多了。首先,谁是这段代码的最终用户?它纯粹是内部的还是严格限制的?因为你让自己暴露于SQL Injection攻击。
也就是说,它看起来执行你想要的操作(创建一个表,然后在该表中插入一行),你必须像上面那样使用动态SQL这样做,但需要注意的是在将其包含在SQL字符串中之前,必须清除firstname.Text
之外的内容。另外,对于insert
字符串,您应该将表名括在[
和]
而不是'
和'
。
注意:要考虑的一件重要事情是您要完成的任务。无论你追求什么,我都无法想象一个场景,其中N个名字输入的N行表是一个很好的设计。
答案 1 :(得分: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);