星期三, 5月 20, 2009

ADO的Persist Security Info與MaxRecord

記錄最近遇到的二件事情
1.某段程式在xp上運行都正常.但在vista上使用到一半時會突然發生"資料庫"登入發生錯誤
2.程式中取出資料均只有1筆(改變DATASET的MaxRecord為0也沒作用)


發生的經過為
事件1.
追查後發現程式中有一段程式會將connection物件中斷再重連,而重連時並沒有再改變connectionstring的內容!在檢查原有的connectionstring時發現並沒有加上Persist Security Info的設定值,導致在vista環境下password在connect中斷後,會自動從連接字串中去除,將Persist Security Info設成ture再加入connectionstring即排除。
ado的環境下,當沒有指定此值預設應都為true,也就是本來應就會保留一些有關安全性的資訊!但不知道為什麼vista上的行為跟xp不同,也由此可證vista真的比較安全! 安全到搞死人啦!!

可以參考微軟msdn中ado.net中相關的說明

事件2.
程式莫名奇妙查詢後的資料均只有一筆,追查後原來是MaxRecord在執行過像 select top 1後,此值會被寫入1,導致後續的查詢只有一筆,試著在改變commandtext時也順便吧maxrecord設成0,那是否能改善上述的問題呢? 答案是否定的@@(在debug環境修改此值結果也是一樣),最後的解法為(dataset):CLOSE; MaxRecord = 0; Connection = nil; Connection = 原有的連結; 即排除問題!

0 個意見: