【问题标题】:SqlDataAdapter.Fill running SQL command twiceSqlDataAdapter.Fill 运行 SQL 命令两次
【发布时间】:2021-11-29 17:25:54
【问题描述】:

我试图从 ASP.NET 在我的 SQL 数据库中插入一个新行,但它插入了两次而不是一次。

我无法找到下面代码的哪一行导致了这种情况。

这是我的代码:

 public static void Register(User user)
        {
            string query = "insert into TblTutors (username,email,pass,sub,category,city,fullname,img,bio,tutor,way)

           values (@username,@email,@pass,@mat,@cat,@country,@fullname,Cast(@img As nvarchar(MAX)),@bio,@tutor,@way )";
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.Parameters.AddWithValue("@username", user.username);
                cmd.Parameters.AddWithValue("@email", user.email);
                cmd.Parameters.AddWithValue("@tutor", user.tutor);
                cmd.Parameters.AddWithValue("@way", user.way);
                cmd.Parameters.AddWithValue("@mat", user.mat);
                cmd.Parameters.AddWithValue("@cat", user.cat);
                cmd.Parameters.AddWithValue("@country", user.country);
                cmd.Parameters.AddWithValue("@pass", "halima");
                cmd.Parameters.AddWithValue("@fullname", user.fullname);
                cmd.Parameters.AddWithValue("@img", user.img);
                cmd.Parameters.AddWithValue("@bio", user.bio);
                con.Open();
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);

                int i = cmd.ExecuteNonQuery();
                con.Close();

            }

        }

【问题讨论】:

  • 删除 SqlDataAdapter (Fill) 周围的代码。 SqlDataAdapter 在调用 Fill 时执行构造函数中传递的查询。执行 INSERT/UPDATE/DELETE 查询的正确方法是通过 ExecuteNonQuery
  • 谢谢你们的建议!

标签: asp.net sql-server database insert duplicates


【解决方案1】:

DataAdapter.Fill 用于用DataAdapterSelectCommand结果 填充DataSet

由于您不想执行任何 SELECT 查询,请删除有关填写 DataTable 的代码,因为它不会返回任何数据,它执行您的 INSERT , UPDATEDELETE cmd 中的 SQL 命令传递给 new SqlDataAdapter(cmd);

您实际上是在写入数据两次,一次是在您填写 dt 时,一次是在您执行查询时:

sda.Fill(dt);
...
int i = cmd.ExecuteNonQuery();

这应该可以按预期工作,也不需要DataSet

public static void Register(User user)
{
    string query = "insert into TblTutors (username,email,pass,sub,category,city,fullname,img,bio,tutor,way)

   values (@username,@email,@pass,@mat,@cat,@country,@fullname,Cast(@img As nvarchar(MAX)),@bio,@tutor,@way )";
    using (SqlCommand cmd = new SqlCommand(query, con))
    {
        cmd.Parameters.AddWithValue("@username", user.username);
        cmd.Parameters.AddWithValue("@email", user.email);
        cmd.Parameters.AddWithValue("@tutor", user.tutor);
        cmd.Parameters.AddWithValue("@way", user.way);
        cmd.Parameters.AddWithValue("@mat", user.mat);
        cmd.Parameters.AddWithValue("@cat", user.cat);
        cmd.Parameters.AddWithValue("@country", user.country);
        cmd.Parameters.AddWithValue("@pass", "halima");
        cmd.Parameters.AddWithValue("@fullname", user.fullname);
        cmd.Parameters.AddWithValue("@img", user.img);
        cmd.Parameters.AddWithValue("@bio", user.bio);

        con.Open();
        int i = cmd.ExecuteNonQuery();
        con.Close();
    }

}

【讨论】:

  • 是的,它有效。感谢您提供信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2023-03-15
  • 2021-06-13
  • 2017-05-05
  • 2015-05-15
  • 2012-01-18
  • 2019-11-20
相关资源
最近更新 更多