使用Command 物件進行非同步操作
在ado.net2.0發步這前,通過Command執行sql命令的執行緒必須等待執行結果.現在需要確保當儲存過程在執行時,應用程式任能響應使用者請求.
下面我們來看一個最簡單的例項:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> SqlConnection conn =new SqlConnection ("server=.\\sqlexpress;database=wtqtest;Integrated Security=sspi;");
private void button1_Click(object sender, EventArgs e)
{
try
{
conn.Open();
string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
SqlCommand cmd = new SqlCommand(strCmd, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
this.textBox1.Text += dr[0].ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> SqlConnection conn =new SqlConnection ("server=.\\sqlexpress;database=wtqtest;Integrated Security=sspi;");
private void button1_Click(object sender, EventArgs e)
{
try
{
conn.Open();
string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
SqlCommand cmd = new SqlCommand(strCmd, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
this.textBox1.Text += dr[0].ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//在這裡,是連線的2005資料庫,大家應該看到了此連線要沿時05秒鐘,而在這05秒內你是什麼也不能做的,你的應用程式會處於一種"卡死"狀態.
下面我們改一改 try 裡的程式碼,並且在連線字串中加上"Asynchronous Processing=true",其它程式碼不變:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> try
{
conn.Open();
string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
SqlCommand cmd = new SqlCommand(strCmd, conn);
IAsyncResult result = cmd.BeginExecuteReader();//當執行到這段程式碼時就開始開始執行sql語句了
while (!result.IsCompleted) //判斷是否已經完成sql語句查詢完成,如果沒完成就可以執行其它程式碼
{
MessageBox.Show("正在等待sql執行..!");//在這裡可以新增非同步程式碼
}//在五秒鐘的等待中,它將不斷的顯示這個對話方塊.表明程式並沒有"卡死".
//如果已經完成查詢就可以把結果傳給 dr 並用dr.Read()讀取結果
using (SqlDataReader dr = cmd.EndExecuteReader(result))
{
while (dr.Read())
{
this.textBox1.Text += dr[0].ToString();
}
}
conn.Close();
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> try
{
conn.Open();
string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
SqlCommand cmd = new SqlCommand(strCmd, conn);
IAsyncResult result = cmd.BeginExecuteReader();//當執行到這段程式碼時就開始開始執行sql語句了
while (!result.IsCompleted) //判斷是否已經完成sql語句查詢完成,如果沒完成就可以執行其它程式碼
{
MessageBox.Show("正在等待sql執行..!");//在這裡可以新增非同步程式碼
}//在五秒鐘的等待中,它將不斷的顯示這個對話方塊.表明程式並沒有"卡死".
//如果已經完成查詢就可以把結果傳給 dr 並用dr.Read()讀取結果
using (SqlDataReader dr = cmd.EndExecuteReader(result))
{
while (dr.Read())
{
this.textBox1.Text += dr[0].ToString();
}
}
conn.Close();
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-466022/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉載]使用BackgroundWorker元件進行非同步操作程式設計元件非同步程式設計
- 非同步操作系列之Promise物件非同步Promise物件
- 使用QTP進行非GUI的自動化測試QTGUI
- python-進階教程-使用物件屬性進行排序Python物件排序
- 使用NSSecureCoding協議進行物件編解碼協議物件
- JVM 併發性: 使用 Akka 執行非同步操作JVM非同步
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- 使用Command執行儲存過程 (轉)儲存過程
- 如何在資料庫事務提交成功後進行非同步操作資料庫非同步
- 利用goldengate進行同步操作測試Go
- 在.net中使用AutoMapper進行物件對映,物件相互轉,簡單方便APP物件
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- 第八篇:使用字串流物件進行格式轉換字串物件
- 非標準物件介面物件
- jquery 定義物件並進行操作jQuery物件
- 執行方案(Command) (轉)
- 使用promis序列化非同步操作非同步
- .NET多執行緒(五)非同步操作執行緒非同步
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 「Js」物件按照鍵名來進行排序JS物件排序
- 如何對JAVA物件進行深拷貝Java物件
- 根據陣列中物件進行排序陣列物件排序
- ES6中Promise 承諾物件封裝非同步操作解析Promise物件封裝非同步
- [.net 物件導向程式設計進階] (8) 託管與非託管物件程式設計
- docker中command的使用Docker
- playwright非同步操作-多標籤執行非同步
- Command(命令)——物件行為型模式(通過Command設計模式實現WinForm表單維護的撤銷與重做功能)物件設計模式ORM
- 使用Redis進行限流Redis
- 走進C++世界------臨時物件使用C++物件
- PHP中使用OpenSSL生成RSA公鑰私鑰及進行加密解密示例(非對稱加密)PHP加密解密
- 物件儲存服務中物件業務的非標介面物件
- .NET Core 中使用多執行緒或非同步操作來實現分片下載執行緒非同步
- Visio對一個物件進行水平翻轉物件
- 對list集合中的物件進行排序(轉載)物件排序
- 避免對派生的非虛擬函式進行重定義函式
- 使用pprof進行效能分析
- 使用gerrit進行code reviewView