ASP.net/c#通过文本框提交SQL代码

ASP.net/c#通过文本框提交SQL代码,c#,asp.net,sql,C#,Asp.net,Sql,我是asp.net/c的新手。我已经写了几个应用程序,所以我可以翻译语言,但我不流利 基本上每年我们都有学生进入学院,我希望能够有一个文本框,我可以在其中输入SQL代码,它会自动更新数据库。当然,这一页是安全的 但是像这样的 (,'11JB0666@gmail.org', '12', 'Joe', 'Bloggs', 'Joseph Bloggs', '11JB0666') 这就是sql脚本中值的代码位 这可能吗 我想我可以用这样的东西 SqlConnection conn = new S

我是asp.net/c的新手。我已经写了几个应用程序,所以我可以翻译语言,但我不流利

基本上每年我们都有学生进入学院,我希望能够有一个文本框,我可以在其中输入SQL代码,它会自动更新数据库。当然,这一页是安全的

但是像这样的

(,'11JB0666@gmail.org', '12', 'Joe', 'Bloggs', 'Joseph Bloggs', '11JB0666') 
这就是sql脚本中值的代码位

这可能吗

我想我可以用这样的东西

SqlConnection conn = new
 SqlConnection(ConfigurationManager.ConnectionStrings["ExtensionActivitesConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand(" Insert into dbo.Names (Email,Year,FirstName,LastName,Name,Username) VALUES (@SQL)", conn);
    cmd.Parameters.AddWithValue("@SQL", SqlTextBox.Text);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

任何帮助或建议都将不胜感激。

这是一种可怕的、潜在危险的方法。我建议您创建一个表单来收集您需要的信息,并使用单独的、正确标记的字段


由于您只收集了少量数据,因此表单应该非常简单。在将数据插入数据库之前,它应该包括客户端和服务器端验证。

从代码中可以清楚地看出,这些值基本上是定义的,没有动态的,因此您应该提供一个正确的表单来输入数据


这种方法很危险,并且容易发生SQL注入。

这将无法像您现在这样处理参数化查询——单引号将被转义,发送到服务器的SQL将无效。这种模式是用来避免的

最好创建一个包含所有所需字段的完整表单,并将各个字段传递给SQL语句。为要插入到
名称表中的每个字段创建一个单独的文本框。在下面的示例中,我将它们命名为emailTextBox、yearTextBox、firstnameTextBox、lastnameTextBox、nameTextBox和usernameTextBox

此外,尽管我提供了一个非常基本的示例,但在实际将数据发送到数据库之前,您可能应该验证每个字段。您应该进行验证,以确保必填字段具有值以及格式——例如,电子邮件具有非常特定的格式,年份可能应该是一个数字。有关验证的更多信息,请参阅以下内容:

例如:

var qry = "Insert into dbo.Names (Email,Year,FirstName,LastName,Name,Username) " + 
          "VALUES (@email, @year, @firstname, @lastname, @name, @username)";    
var cmd = new SqlCommand(qry);
cmd.Parameters.AddWithValue("@email", emailTextBox.Text);
cmd.Parameters.AddWithValue("@year", yearTextBox.Text);
cmd.Parameters.AddWithValue("@firstname", firstnameTextBox.Text);
cmd.Parameters.AddWithValue("@lastname", lastnameTextBox.Text);
cmd.Parameters.AddWithValue("@name", nameTextBox.Text);
cmd.Parameters.AddWithValue("@username", usernameTextBox.Text);

我建议您不要直接提交SQL,尤其是向生产或集成系统数据库提交SQL。只需使用表单和完全参数化的sql,就可以实现相同的效果。我完全理解你的立场和目标,虽然这看起来像是一个快速的实用程序,但它真的可以咬你的路。为了安全起见,付出额外的努力是值得的,有很多简单的表单->数据库asp.net ado.net示例可以帮助您实现这一点。+1用于跟进James的答案并给他一个示例。Steve,如果您不清楚,Randolpho的方法对每个输入值使用不同的文本框。@LynnCrumbling感谢您指出这一点;我会修改我的答案,让它更清楚。嗨,谢谢你的回复。我完全理解每个人在说什么。然而,在这种情况下,我不认为表单是正确的方法。我们每年只运行一次,我们将在数据库中插入120个学生姓名。我希望这个任务由非管理员执行,所以我不希望它们进入SQL数据库并以这种方式插入。朱特认为可能有办法。我知道你可以在phpmyadmin网页上完成这项工作?我想你担心制作一个web表单所涉及的工作量,但是相信我,开发表单包括所有验证不应该超过一天。表单中涉及的不是工作,而是输入120个名称的时间。使用CSV文件上传怎么样?有人知道怎么做吗?