不保存新记录到SQL Server数据库

时间:2013-09-17 17:10:21

标签: c# asp.net sql sql-server

问题是我的代码没有使用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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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 statement以及在异常情况下有助于关闭和销毁这些实例的命令。

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

表名称的串联仍然存在问题,但我希望您对此输入有完全控制权,之前已准备好下拉列表的内容。

答案 2 :(得分:2)

你没有执行命令,你没有打开Connection,你的代码对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;
        }

    }

答案 3 :(得分:1)

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

既然您正在使用ADO.NET,我认为您在设置我正在考虑的ComamndText之后必须执行_command对象...