我的问题是,在我的ASP.NET应用程序中,仅在应用程序启动时才第一次执行从窗体中插入数据的操作。之后,插入也不会完成。
我尝试调试该应用程序,并且在调试模式下每次都插入数据。我还使用了SQL Server事件探查器,除了第一次在数据库中提交表单外,数据库中没有插入内容。但是,当我在调试模式下运行时,插入操作没有任何问题。
这是来自Controller的方法:
[HttpPost]
public ActionResult Form(Product p)
{
IO.Insert(p);
return RedirectToAction("Index");
}
这是执行插入的方法:
public static void Insert(Product pr)
{
using (SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["Database"]))
{
connection.Open();
string s = "INSERT INTO Product (Id, Name, Price, Description, Category, Image) VALUES (@GUID, @Name, @Price, @Description, @Category, @Image)";
using (SqlCommand cmd = new SqlCommand(s, connection))
{
cmd.Parameters.Add("@GUID", SqlDbType.UniqueIdentifier).Value = new Guid();
cmd.Parameters.Add("@Name", SqlDbType.NChar).Value = pr.Name;
cmd.Parameters.Add("@Price", SqlDbType.Int).Value = pr.Price;
cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value = pr.Description;
cmd.Parameters.Add("@Category", SqlDbType.NVarChar).Value = pr.Description;
cmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = IO.ImageInsert(pr.Picture);
cmd.BeginExecuteNonQuery();
}
}
} 另外,除了主线程外,我没有使用任何其他线程。
您正在using块中包含命令,cmd.BeginExecuteNonQuery();启动此SqlCommand描述的Transact-SQL语句或存储过程的异步执行。通过使用BeginExecuteNonQuery方法返回的属性或返回的IsCompleted属性,通过轮询以确定命令是否已完成,您无需等待命令完成。IAsyncResultAsyncWaitHandleIAsyncResult
您可以按以下方式更改代码以等待命令执行。
IAsyncResult result = cmd.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
// Wait till the command executes
Console.WriteLine("Waiting for query execution");
}
Console.WriteLine("Command complete. Affected {0} rows.", cmd.EndExecuteNonQuery(result));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。