SqlDataAdapter.Fill 运行 SQL 命令两次

SqlDataAdapter.Fill running SQL command twice

我正在尝试从 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();

            }

        }

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

由于您不打算执行任何 SELECT 查询,请删除有关填充 DataTable 的代码,因为它不会 return 任何数据,它 执行你的INSERTUPDATEDELETE SQL命令在cmd传递给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();
    }

}