我正在使用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();
}
}
Anny建议如何避免这种情况?
更新
对,经过一些调试后,我发现我的newWallComplaint_Click
函数被触发了两次。这是因为我有以下代码:
protected void Page_Load(object sender, EventArgs e)
{
btnNewWallComplaint.Click += new EventHandler(this.newWallComplaint_Click);
}
不检查PostBack,这也是在提交后执行我的功能。因此,为了避免我的函数运行两次,我添加了一个PostBack检查。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btnNewWallComplaint.Click += new EventHandler(this.newWallComplaint_Click);
}
}
现在我的查询没有运行两次。
答案 0 :(得分:2)
我在代码中看不到会执行两次的任何内容。我假设它被调用了两次。在addNewComment
处设置一个断点,如果它被调用两次,请查看堆栈跟踪以查看在两种情况下从哪里调用它。
例如,你可能有两次被调用的事件。如果您已启用事件的自动连接并且已明确连接事件,则可能会在ASP.NET中发生这种情况。
顺便说一句,你绝对应该使用parametrized queries而不是字符串连接。我假设评论是用户提供的输入?在这种情况下,您将使用您显示的代码为自己设置SQL注入攻击。
答案 1 :(得分:1)
我发现我有数据表和数据集但只需要数据表......
因为我让它们在同一个命令中彼此相邻,所以创建了一个副本......
确保你使用命令中的所有内容,即使你像我一样醒了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);
希望它可以帮助某人...
答案 2 :(得分:0)
你真的需要一个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();
}
}
}