如果WEB跟SQLSERVER不同台,可能要另外設定,測試環境是沒有網域的環境
WEB OS W7 64位元,ASP.NET 跑在 Apache HTTP Server 2.2
SQLSERVER OS 是 2012 R2
1.執行 dcomcnfg
2.元件服務 > 電腦 > 我的電腦 Distributed Transaction Coordinator > 本機DTC 右鍵內容 > 安全性
3.設定如下,WEB跟SQLSQEVER都要設定
網路 DTC 存取 打勾
允許遠端用戶端 打勾
允許遠端系統管理 打勾
允許輸入 打勾
允許輸出 打勾
4.WEB這台另外要設定
元件服務 > 電腦 > 我的電腦 右鍵 內容 > MSDTC
使用本機協調器 不能打勾 > 選取 > WORKGROUP\XXX > 會要求輸入XXX這台電腦的帳密,帳號要KEY成 XXX\ADMINISTRATOR這樣
如果找不到電腦,請到C:\Windows\System32\drivers\etc\hosts 加入 192.168.1.XXX 電腦名稱
5.WEB跟SQLSERVER這二邊的防火牆要設定一下,讓 分散式異動協調器 可以進跟出
可以利用DTCPING測試,我也還沒測,先記一下
補充 :
本來防火牆是先全開,後來有關起來,再對輸入輸出的 分散式異動協調器 設定,但好像沒設定好,跑出了這個
6.設定完如果還是不行,先把SQLSERVER重開一下試看看,有時要等一下下,應該是要等設定生效,微軟設定有時都要過一段時間才會生效
=================== ASP.NET的程式如下 ===========================
//刪除收案資料
public void delaccept()
{
using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection conn1 = new SqlConnection(strConn))
{
try
{
String strCmd1 = @"DELETE FROM liver_accept WHERE patno=@patno";
using (SqlCommand cmd = new SqlCommand(strCmd1, conn1))
{
cmd.Parameters.AddWithValue("@patno", lblinfopatno.Text);
conn1.Open();
cmd.ExecuteNonQuery();
}
using (SqlConnection conn2 = new SqlConnection(strConn))
{
try
{
String strCmd2 = @"DELETE FROM Search WHERE patno=@patno";
using (SqlCommand cmd = new SqlCommand(strCmd2, conn2))
{
cmd.Parameters.AddWithValue("@patno", lblinfopatno.Text);
conn2.Open();
cmd.ExecuteNonQuery();
}
}
catch (Exception ex2)
{
// 例外狀況
//無效,有空再測試,因為有用UpdatePanel1
// ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "err", "alert('" + ex2 + "');", true);
// ScriptManager.RegisterStartupScript(this, this.GetType(), "err", "alert('" + ex2 + "');", true);
}
finally
{
conn2.Close();
}
}
}
catch (Exception ex1)
{
// 例外狀況
//無效,有空再測試,因為有用UpdatePanel1
// ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "err", "alert('" + ex1 + "');", true);
// ScriptManager.RegisterStartupScript(this, this.GetType(), "err", "alert('" + ex1 + "');", true);
}
finally
{
conn1.Close();
}
}
scope.Complete();
}
}
沒有留言:
張貼留言