-1

问题是我的代码没有使用 asp.net c# 将新记录插入/保存到我的 SQL Server 数据库中,并且没有给我任何错误。

这是我的代码:

 public partial class AddNews_AddNews : System.Web.UI.Page
 {
        protected SqlConnection _connection;
        protected SqlCommand _command;
        protected SqlDataAdapter _adp;
        protected System.Data.DataTable _tbl;

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void Button1_Click1(object sender, EventArgs e)
        {
            prepareConnection();
            _command.CommandText = "INSERT INTO" + drbdlSection.SelectedItem + "(Title,Contect) VALUES (" + titleTextBox.Text + "," + CKEditor1.Text + ");";
        }

        protected void prepareConnection()
        {
            _connection = new SqlConnection(@"Data Source=localhost;Initial Catalog=BrainStorms;User ID=sa;Password=xxx");
            _connection.Open();
            _command = new SqlCommand();
            _command.Connection = _connection;
        }
    }
4

4 回答 4

5

您需要添加_command.ExecuteNonQuery();到 Button1_Click1() 方法的末尾。您已经设置了要运行的查询,但实际上从未运行过它。

于 2013-09-17T17:17:58.317 回答
4

应该执行一个命令。您的代码缺少对 ExecuteNonQuery 的调用

    protected void Button1_Click1(object sender, EventArgs e)
    {
        ....
        command.ExecuteNonQuery();
    }

话虽如此,我真的建议删除使您的命令文本的字符串连接。
您的代码对Sql Injection和解析问题开放

所以我会用这种方式重写你的代码

    protected void Button1_Click1(object sender, EventArgs e)
    {
        string commandText = "INSERT INTO " + drbdlSection.SelectedItem.ToString() + 
                             "(Title,Contect) VALUES (@title, @edit)"
        using(SqlConnection con = prepareConnection())
        using(SqlCommand command = new SqlCommand(commandText, con))
        {
            command.Parameters.AddWithValue("@title", titleTextBox.Text);
            command.Parameters.AddWithValue("@edit", CKEditor1.Text);
            command.ExecuteNonQuery();
        } 
    }

    protected SqlConnection prepareConnection()
    {
        SqlConnection con = new SqlConnection(......);
        con.Open();
        return con;
    }

在这次重写中,我更改了prepareConnection返回 SqlConnection 实例的方法,并删除了创建命令的代码。
这将允许删除用于连接和命令的全局变量。

然后,在按钮事件中,我在连接周围添加了using 语句,以及在出现异常时也有助于关闭和销毁这些实例的命令。

最后,将参数添加到命令参数集合中,让任务将您的值传递给比您和我更了解如何正确执行此操作的框架。

表名的连接仍然存在问题,但我希望您在之前准备好下拉列表的内容后可以完全控制此输入。

于 2013-09-17T17:17:07.587 回答
2

您不执行命令,不打开连接,并且您的代码对 SqlInjection 使用参数开放!

public partial class AddNews_AddNews : System.Web.UI.Page
    {    
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click1(object sender, EventArgs e)
        {
            using(var connection = this.GetConnection())
            {
               using(var cmd = new SqlCommand())
               {
                  cmd.CommandText = "INSERT INTO " + drbdlSection.SelectedItem + "(Title, Contect) VALUES (@param1, @param2)";
                  cmd.Parameters.AddWithValue("@param1", titleTextBox.Text);
                  cmd.Parameters.AddWithValue("@param2", CKEditor1.Text);
                  cmd.Connection.Open();
                  cmd.ExecuteNonQuery();
               }
            }
        }

        protected SqlConnection GetConnection()
        {
            var connection = new SqlConnection(@"Data Source=localhost;Initial Catalog=BrainStorms;User ID=sa;Password=xxx");
            return connection;
        }

    }
于 2013-09-17T17:17:39.407 回答
1

Insert 语句,您的字符串周围没有单引号(除非您实际上在文本框中输入单引号)...不确定这是否会导致问题;我不记得了——但值得一试。

而且由于您使用的是 ADO.NET,因此我认为您必须在设置我正在考虑的 ComamndText 后执行 _command 对象...

于 2013-09-17T17:19:08.250 回答