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
用于使用 DataAdapter
的 SelectCommand
的 结果 填充 DataSet
。
由于您不打算执行任何 SELECT
查询,请删除有关填充 DataTable
的代码,因为它不会 return 任何数据,它 将执行你的INSERT
、UPDATE
和DELETE
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();
}
}
我正在尝试从 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
用于使用 DataAdapter
的 SelectCommand
的 结果 填充 DataSet
。
由于您不打算执行任何 SELECT
查询,请删除有关填充 DataTable
的代码,因为它不会 return 任何数据,它 将执行你的INSERT
、UPDATE
和DELETE
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();
}
}