SQL插入查询被执行两次(SQL Insert query is executed twice)

2019-09-29 17:10发布

我使用adapter.InsertCommand一些数据插入到表中。

唯一的问题是,它的执行两次,从而使我在DB双项。 我试过下面的文档中的例子adapter.InsertCommand和我自己的代码,但得到了同样的结果。

这是我的代码:

public class nokernokDAL
{
    SqlConnection connection = new SqlConnection();
    SqlDataAdapter adapter = new SqlDataAdapter();

    public nokernokDAL()
    {
        connection.ConnectionString = EPiServer.Global.EPConfig["EPsConnection"].ToString();
        connection.Open();
    }

    public void addNewComment(int userID, int pageID, string title, string comment)
    {
        string query = "INSERT INTO dbo.nokernok_kommentarer (userID, pageID, commentTitle, comment) " +
                       "VALUES ("+ userID +", "+ pageID +", '"+ title +"', '"+ comment +"')";

        adapter.InsertCommand = new SqlCommand(query, connection);
        adapter.InsertCommand.ExecuteNonQuery();

    }
}

在我怎样才能避免这种安妮建议?

UPDATE

右,一些调试后,我发现我的newWallComplaint_Click功能被解雇了两次。 这是becuae我有下面的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
            btnNewWallComplaint.Click += new EventHandler(this.newWallComplaint_Click);
    }

不检查回传,这个执行我的功能也提交后。 因此,为了避免两次我的功能来看,我添加了回发的支票。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            btnNewWallComplaint.Click += new EventHandler(this.newWallComplaint_Click);
        }

    }

现在我的查询不运行两次。

Answer 1:

我看不出在你的代码任何可能执行两次。 我认为它被称为两次。 把一个破发点,在addNewComment如果被调用两次看堆栈跟踪,看看它正在从两个场合呼吁。

也许你有被称为例如两次的事件。 这可以在ASP.NET发生,如果你都启用了事件的自动布线,并已明确了有线的事件。

顺便说一句,你绝对应该使用参数化查询不字符串连接。 我假设注释用户提供的输入? 在这种情况下,你是在和自己的SQL注入攻击与已显示的代码。



Answer 2:

我发现,我有两个数据表和数据集,但只需要数据表...

因为我让他们都在同一个命令旁边的海誓山盟运行,重复创建...

请确保您在命令中使用一切,你了解每个人做,即使你醒了2天,就像我是...

            DataSet dataset = new DataSet();

            data.Fill(dataset, "data");

            // Populate a new data table and bind it to the BindingSource.
            DataTable datatable = new DataTable();
            data.Fill(datatable);

你可以看到我有两个来源填补一个个MySqlDataAdapter ...

            //removing the following two lines fixed my duplicates issue...
            //DataSet dataset = new DataSet();
            //data.Fill(dataset, "data");

            // Populate a new data table and bind it to the BindingSource.
            DataTable datatable = new DataTable();
            data.Fill(datatable);

希望它可以帮助别人...



Answer 3:

你真的需要这一个DataAdapter? 也许你可以试试这个。

 public class nokernokDAL
 {
     string connectionString;

     public nokernokDAL()
     {
         ConnectionString = EPiServer.Global.EPConfig["EPsConnection"].ToString();
     }

     public void addNewComment(int userID, int pageID, string title, string comment)
     {
         string query = "INSERT INTO dbo.nokernok_kommentarer (userID, pageID, commentTitle, comment) " +
                        "VALUES ("+ userID +", "+ pageID +", '"+ title +"', '"+ comment +"')";

         using (SqlConnection conn = new SqlConnection(_connString))
         {
             SqlCommand cmd = conn.CreateCommand();
             cmd.CommandText = Query;
             conn.Open();
             cmd.ExecuteNonQuery();
         }
     }
 }


文章来源: SQL Insert query is executed twice