ASP.Net 中没有异步的嵌套查询
Nested Queries In ASP.Net Without Async
我有以下代码,基本上我希望它使用 If 语句逐步执行。然而,当我 运行 这个时,我得到这个 asp 错误: "This command requires an asynchronous connection. Set "Asynchronous Processing=true" in the connection string."
在这段代码中:
"addToTable.BeginExecuteReader();"
但是我不希望它通过异步进行,我希望它 运行 只有满足先前的条件才能进行后续查询。
完整代码如下:
string dataset="";
if (System.Web.HttpContext.Current.Session["user"] != null)
{
if (name != null && carId != null)
{
using (SqlConnection con = new SqlConnection(st))
{
string getCar = "SELECT * FROM [Car] WHERE CarId = @carId";
SqlCommand cmd = new SqlCommand(getCarData, con);
cmd.Parameters.AddWithValue("@carId", carId);
using (cmd)
{
con.Open();
SqlDataReader data = cmd.ExecuteReader();
if (data.HasRows)
{
while (data.Read())
{
if (data["available"].ToString() == "0")
{
data.Close();
SqlCommand getParts = new SqlCommand("SELECT * FROM [CarCustomer] WHERE UserId = @UserId AND car=@carId", con);
getParts.Parameters.AddWithValue("@userId", System.Web.HttpContext.Current.Session["userId"]);
getParts.Parameters.AddWithValue("@carId", carId);
SqlDataReader grabRows = getParts.ExecuteReader();
if (grabRows.HasRows)
{
grabRows.Close();
SqlCommand updateTable = new SqlCommand("UPDATE [Table1] SET salesAmount=5 WHERE UserId=1", con);
updateTable.BeginExecuteReader();
}
else
{
grabRows.Close();
SqlCommand addToTable = new SqlCommand("INSERT INTO [Table1] (salesAmount) Values("1")", con);
addToTable.BeginExecuteReader();
}
dataset="good"
}
}
}
}
}
}
}
return dataset;
而不是 BeginExecuteReader
命令使用 SqlCommand.ExecuteNonQuery
,因为 ExecuteNonQuery
用于执行插入、更新和删除等查询,其中使用获取数据读取方法。
还有一件事 BeginExecuteReader
方法用于执行异步读取操作,所以如果您不想要它,只需使用 ExecuteReader
方法来获取数据。
阅读SqlCommand.ExecuteNonQuery -
您可以使用 ExecuteNonQuery 执行目录操作(例如,查询数据库的结构或创建数据库对象(如表)),或者通过执行 UPDATE、INSERT 或 DELETE 语句来更改数据库中的数据而不使用 DataSet。
我有以下代码,基本上我希望它使用 If 语句逐步执行。然而,当我 运行 这个时,我得到这个 asp 错误: "This command requires an asynchronous connection. Set "Asynchronous Processing=true" in the connection string." 在这段代码中: "addToTable.BeginExecuteReader();"
但是我不希望它通过异步进行,我希望它 运行 只有满足先前的条件才能进行后续查询。
完整代码如下:
string dataset="";
if (System.Web.HttpContext.Current.Session["user"] != null)
{
if (name != null && carId != null)
{
using (SqlConnection con = new SqlConnection(st))
{
string getCar = "SELECT * FROM [Car] WHERE CarId = @carId";
SqlCommand cmd = new SqlCommand(getCarData, con);
cmd.Parameters.AddWithValue("@carId", carId);
using (cmd)
{
con.Open();
SqlDataReader data = cmd.ExecuteReader();
if (data.HasRows)
{
while (data.Read())
{
if (data["available"].ToString() == "0")
{
data.Close();
SqlCommand getParts = new SqlCommand("SELECT * FROM [CarCustomer] WHERE UserId = @UserId AND car=@carId", con);
getParts.Parameters.AddWithValue("@userId", System.Web.HttpContext.Current.Session["userId"]);
getParts.Parameters.AddWithValue("@carId", carId);
SqlDataReader grabRows = getParts.ExecuteReader();
if (grabRows.HasRows)
{
grabRows.Close();
SqlCommand updateTable = new SqlCommand("UPDATE [Table1] SET salesAmount=5 WHERE UserId=1", con);
updateTable.BeginExecuteReader();
}
else
{
grabRows.Close();
SqlCommand addToTable = new SqlCommand("INSERT INTO [Table1] (salesAmount) Values("1")", con);
addToTable.BeginExecuteReader();
}
dataset="good"
}
}
}
}
}
}
}
return dataset;
而不是 BeginExecuteReader
命令使用 SqlCommand.ExecuteNonQuery
,因为 ExecuteNonQuery
用于执行插入、更新和删除等查询,其中使用获取数据读取方法。
还有一件事 BeginExecuteReader
方法用于执行异步读取操作,所以如果您不想要它,只需使用 ExecuteReader
方法来获取数据。
阅读SqlCommand.ExecuteNonQuery - 您可以使用 ExecuteNonQuery 执行目录操作(例如,查询数据库的结构或创建数据库对象(如表)),或者通过执行 UPDATE、INSERT 或 DELETE 语句来更改数据库中的数据而不使用 DataSet。