※ 引述《thinkfun (thinkfun)》之銘言:
: 謝謝大家的回應,但是目前偶而還是有這個問題,
: 我做了幾個處理,不曉得是否還有其他原因,懇請大家幫忙看一下問題可能在哪
: ※ 引述《TonyQ (沉默是金。)》之銘言:
: : 理論上網路斷線不會有影響,session 的 scope 可以看看網路資料,
: : default session timeout 「通常」是 30 min ,
: : 關掉 browser 也會幹掉 session 。
: 我設定 session.timeout=240 每個網頁連線最多30min, 應該不會有這個問題
: : 不每個網頁分別存取的理由是?
: : 如果這四個問卷都要填很久,那寧可開暫存table也比存session好。
: 我目前是每個網頁都存入資料庫,但是只有第三、四個網頁常常出現
: 資料沒有存入資料庫的情形,所以才想,會不會是經常讀取資料庫,
: 才造成資料遺失。
: : 這要看你的結構怎麼設計,但是基本上我個人覺得是你code有問題。
: : 正常的 code 來講沒這麼弱啦,除非你每個 connection 都開了不關,
: : 這樣可能多到一個次數他就連不上了,不過這也不只 access 會這樣。
: 關於這點想問幾個問題,
: 1.我使用sqldatasource 連結資料庫,並把連結字串設定在web.config,
: 這是否會造成進入網頁時,資料庫的連線一直保持開啟?
: 但我搜尋後又發現,sqldatasource 會自動關閉資料庫連結,所以不需
: 處理connection 的問題。
需要時才開啟連結,不需要時當然關閉,不用一直保持資料庫連結,正常。
: 2.根據上述,sqldatasource 連結資料庫是否一段時間後會自動關閉連結
: 導致後續的資料遺失?
不會,如我上面說的,需要時才會開啟連結。
: : 相信我,你的使用量沒有大到有這方面的問題。
: : 其實才幾十個人存取,沒這麼弱啦。
: : 至少我曾經拿來寫過一個同時有20個人以上同時瀏覽的簡易ajax留言板,
: : 一晚上處理一百多則留言,還活的好好沒掛過。
: : (雖然這對 db 來講算是非常微量微量的操作,
: : 他好歹也是小 db ,不是小玩具好嗎XD)
: : 還有另一個 case 是拿來寫全校教官的值勤紀錄報表,
: : 運作2-3年也沒出過狀況啊。
: 目前有另外想到幾個可能原因
: 1. 這個網站,是架在一個 提供 Apache 和 IIS 的環境中,
: 是否另一個原因是Apache 和 IIS 衝突導致的?
: 但是他們提供服務的port 不同,這樣還是會產生衝突嗎?
基本上不會,但是不排除就是了。再者是DB的問題不是HTTP的問題...
: 2. 因為 只有第三、四個網頁有問題,所以我把第三個網頁的程式碼貼上來
: 請大家看看是否程式在撰寫中有什麼問題,導致這種情況發生
: 原本下面的12~18行程式,是放在21~22行程式間,這是造成問題的原因嗎?
: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
: System.EventArgs)
: Dim selectedid As Integer, InsertCommandString, UserInput, Product, Addr As
: String, P_Type As Integer
: Dim Blist() As String ={"a","b","c","d"}
: DClist() As String ={"e","f","g","h"}
: selectedid = Application("counter1")
: pname = Session("P_name")
: Addr = Request.Cookies("Addr").Value
: UserInput = "ignore"
: 12 If Session("Product") <> 0 Then
: 13 Product = DClist(pname)
: 14 P_Type = Session("Product")
: 15 Else
: 16 Product = Blist(pname)
: 17 P_Type = Session("Product")
: 18 End If
: SqlDataSource1.SelectCommand = "SELECT * FROM [Q1] where id=" &
: selectedid
: GridView1.DataBind()
: 21 If CInt(GridView1.Rows.Count.ToString()) <= 0 Then
GridView.Rows.Count本身就是Integer了~不用ToString再CInt...
: '因為寫入資料庫的部分有成功寫入過,所以我略過InsertCommandString的設定
: 22 SqlDataSource1.InsertCommand = InsertCommandString
: SqlDataSource1.Insert()
: Response.Redirect("./Personal.aspx")
: Else
: Response.Redirect("./Personal.aspx")
: End If
: End Sub
先確定幾個問題...
1.Session("P_name")的值是什麼?
2.Session("Product")的值是什麼?
其實感覺你想得到的東西是...
Product設定為DClist或Blist中的某個值
然後P_type=Product,Session("Product")=pname
不過感覺你的selectedid可能有點問題~
Debug一下,在
SqlDataSource1.SelectCommand = "SELECT * FROM [Q1] where id=" & selectedid 後
加入
Response.Write("SELECT * FROM [Q1] where id=" & selectedid.ToString())
確定你的SqlDataSource1沒有問題...
不過講這麼多好像和你的情況沒有什麼關係 = ="
因為你目前是感覺沒有寫入資料~
而前面說的那些...好像都不會影響到你寫資料的問題...
除了selectedid之外...其他的沒什麼關係!
建議你可以
在 If Cint(GridVies1.Rows.Count.ToString()) <=0 之下加入
Respose.Write("InsertValue")
在 Else 之下加入
Response.Write("NotInsert")
然後去看看到底有沒有進到整個寫入的判斷中...
另外您應該有指定GridView1的DataSource是SqlDataSource1吧...
然後 21~最後可以改寫成(含我之前說的修正)
If GridView1.Rows.Count <=0 Then
SqlDataSource1.InsertCommand = InsertCommandString
SqlDataSource1.Insert()
Response.Write("InsertValue") 'DeBug句子,無此句可省略下二行
Else '因DeBug關係,需加入此行
Response.Write("NotInsert") 'DeBug句子,與前二行關聯
End If
Respnose.Redirect("./Personal.aspx")
希望可以幫到你!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.76.190.21