【问题标题】:Executing an INSERT command using ASP.net使用 ASP.net 执行 INSERT 命令
【发布时间】:2013-12-18 13:25:02
【问题描述】:

我正在使用 Visual Studio 2010 为大学作业创建一个简单的网站。我正在尝试创建一个联系表单,将用户名、电子邮件和消息提交到我的数据库表 Messages。

我已经创建了相关的 Web 服务,当我尝试从表中获取 GET 数据时,我知道它正在工作。我对如何将INSERT 数据放入表中感到有些困惑。

以下是我的网络服务的代码。我关心的方法是addMessage()我在点击contact.aspx页面上的按钮时调用该方法。

    public class Customers : System.Web.Services.WebService {

    [WebMethod]
    public DataSet getCustomers() {
        SqlConnection conn;
        SqlDataAdapter myDataAdapter;
        DataSet myDataSet;
        string cmdString = "Select * From Customers";
        conn = new SqlConnection("Data Source=localhost\\SQLEXPRESS;AttachDbFilename=C:\\Users\\n00093500\\Desktop\\MMCA2\\APP_DATA\\NORTHWIND.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        myDataAdapter = new SqlDataAdapter(cmdString, conn);
        myDataSet = new DataSet();
        myDataAdapter.Fill(myDataSet, "Customers");
        return myDataSet;
    }

    [WebMethod]
    public void addMessage(String n, String e, String m)
    {
        SqlConnection conn;
        SqlDataAdapter myDataAdapter;
        SqlCommand myCommand = new SqlCommand("INSERT INTO Messages VALUES("+n+","+e+","+m+")");
        conn = new SqlConnection("Data Source=localhost\\SQLEXPRESS;AttachDbFilename=C:\\Users\\n00093500\\Desktop\\MMCA2\\APP_DATA\\NORTHWIND.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        //UNSURE WHAT TO DO FROM THIS POINT... CAN I USE myDataAdapter to execute a query?
    }

}

感谢你们可能得到的任何帮助!谢谢

【问题讨论】:

  • 您的担心是对的。该代码容易受到 sql 注入攻击。它实际上是在乞求被黑。
  • 我现在不关心这个,我只是在学习如何使用 ASP 的基本知识。只需要知道如何将表单中的数据放入我的消息表中
  • @Javacadabra 我认为这是解决 Joel 注入问题的糟糕方法。这很重要,而且真的不比按照现在的方式做更难。
  • @ChrisFarmer 如果它不涉及偏离我的原始代码,我当然会接受它,但现实是我正在尝试将最基本的功能集成到一个网站中对于我参加的大学模块,不会详细查看代码。

标签: c# asp.net sql visual-studio-2010


【解决方案1】:
[WebMethod]
public void addMessage(String n, String e, String m)
{
    string sql = "INSERT INTO Messages VALUES(@n, @e, @m)";
    using (var conn = new SqlConnection("Data Source=localhost\\SQLEXPRESS;AttachDbFilename=C:\\Users\\n00093500\\Desktop\\MMCA2\\APP_DATA\\NORTHWIND.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"))
    using (var cmd = new SqlCommand(sql, conn))
    {
       //change these three lines to use actual database column types, lengths
       //I'll pretend "e" is a date column just to show an example of how that might look
       cmd.Parameters.Add("@n", SqlDbType.NVarChar, 50).Value = n;
       cmd.Parameters.Add("@e", SqlDbType.DateTime).Value = DateTime.Parse(e);
       cmd.Parameters.Add("@m", SqlDbType.NVarChar, 50).Value = m;

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

【讨论】:

  • 完美的乔尔,很有道理,感谢您的帮助!将在 5 分钟内接受答复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2011-10-25
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
相关资源
最近更新 更多