就是那个“超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。”的问题,今天终于解决了。
解决的途径就是使用DataAdapter的Fill来填充DataTable,然后从DataTable中读取数据。
DataTable是内存中的数据表,是独立于数据源的,所以在读取其中数据时,无需建立数据库的连接,这样就避免了连接的占用。
posted @ 2006-07-28 13:18 陈涛 阅读(178) | 评论 (1)编辑
超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
在地方客的开发过程中遇到几次这样的错误。其实可以知道原因就是数据库连接过于频繁造成的。但是因为读取每个地点后,需要读取这个地点的所有上级地点或下级地点,多次使用嵌套调用,一定会造成这个错误。我现在还没有找到一个好的办法来解决这个问题,系统也不能不读取联级数据,所以只能通过一些拙劣的手段来尽量避免。
posted @ 2006-07-15 16:33 陈涛 阅读(55) | 评论 (0)编辑
实现分页,可以使用嵌套查询,也可以使用存储过程。不过存储过程太复杂,执行效率也不一定高,所以我就用这样的嵌套语句来实现:
SELECT TOP 页大小 * FROM TestTable WHERE (ID >(SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id  FROM 表 ORDER BY id) AS T)) ORDER BY ID
posted @ 2006-07-12 14:26 陈涛 阅读(839) | 评论 (9)编辑
这个代码实现了这样的功能:页面载入时读取数据库,判断用户是否收藏了地点(即是否去过或者想去),然后显示:假如收藏了,则显示收藏类型;假如未收藏,则显示收藏按钮。
当显示收藏按钮时,用户点击按钮,更新数据库,并更新页面,显示为收藏状态。显示收藏状态时,旁边有删除收藏的按钮,点击后,删除数据库记录,并更新页面。

开始的时候遇到一个问题:页面载入时显示正常,但当用户修改时,XMLHttpRequest对象会始终处于发送状态,无法接收到服务器端响应。

经过不断修改,尝试,终于发现问题所在:
因为整个过程使用的是同一个XMLHttpRequest对象,则可能导致上次的数据传输影响下次传输的问题。
解决方法就是在第一次使用XMLHttpRequest对象后,下一次调用前释放XMLHttpRequest对象。使用语句
XMLHttpRequest.abort
可以实现。

修改后代码如下:
 1    var xhr_h;
 2            
 3    function createXMLHttpRequest(){
 4    if(window.XMLHttpRequest){
 5    xhr_h = new XMLHttpRequest();
 6    if (xhr_h.overrideMimeType){
 7    xhr_h.overrideMimeType("text/xml");
 8    }

 9        
10    }

11    else if(window.ActiveXObject){
12    try{
13    xhr_h = new  ActiveXObject("Msxml2.XMLHTTP");
14    }
catch(e){
15    xhr_h = new ActiveXObject("Microsoft.XMLHTTP");
16    }

17    }

18    if(!xhr_h){
19        document.getElementById("divishere").innerHTML ="浏览器不支持";
20    }

21    return xhr_h;
22    }

23            
24    function load_ishere(){
25        createXMLHttpRequest();
26        document.getElementById("divishere").innerHTML ="正在读取";
27        xhr_h.onreadystatechange=show_ishere;
28        xhr_h.open("GET","ajax/load_ishere.aspx?p=" + thisp);
29        xhr_h.send(null);
30    }

31
32    function save_place(a){
33        xhr_h.abort();
34        createXMLHttpRequest();
35        document.getElementById("divishere").innerHTML ="正在保存";
36        xhr_h.onreadystatechange=show_ishere;
37        xhr_h.open("GET","ajax/load_ishere.aspx?p=" + thisp + "&a=" + a);
38        xhr_h.send(null);
39    }

40
41    function del_place(){
42        xhr_h.abort();
43        createXMLHttpRequest();
44        document.getElementById("divishere").innerHTML ="正在更新";
45        xhr_h.onreadystatechange=show_ishere;
46        xhr_h.open("GET","ajax/load_ishere.aspx?p=" + thisp + "&d=1");
47        xhr_h.send(null);
48    }

49            
50    function show_ishere(){
51        if(xhr_h.readystate==4){
52            if(xhr_h.status==200){
53                var strreturn=xhr_h.responseText;
54                document.getElementById("divishere").innerHTML =strreturn;
55            }
else{
56                document.getElementById("divishere").innerHTML ="错误:"+xhr_h.status;
57            }

58        }

59    }

60
61    load_ishere();

posted @ 2006-07-04 21:22 陈涛 阅读(780) | 评论 (0)编辑

所有的地点信息,无论是国家还是城市,都存储在表place里,每个地点由主键id标识,字段upid记录了这个地点的上级地点的id。最上级地点的upid字段为空。
现在要求显示一个地点,包括它的所有上级地点。比如需要得到如下结果:

中国 > 云南 > 昆明 > 五华区

思路其实很简单,用嵌套自身的子过程就能实现。只有关键的一点:控制循环的结束。当进行一次循环时,判断upid字段是否为空,为空则停止循环。将每次循环读取的地点信息累加赋值给字符串变量。

代码如下:
 1    Private Sub Show_UpPlace()Sub Show_UpPlace(ByVal newID)
 2
 3        txtSQL = "select * from place where id='" & newID & "'"
 4        cnn = New SqlClient.SqlConnection(ConfigurationSettings.AppSettings("objconnstr"))
 5        cmd.Connection = cnn
 6        cmd.Connection.Open()
 7        cmd.CommandText = txtSQL
 8        rdr = cmd.ExecuteReader()
 9
10        If rdr.Read() = True Then
11            strUpName = rdr("name"& strUpName
12
13            If Not rdr("upid"Is DBNull.Value Then
14                Dim newUpID As Integer
15                newUpID = rdr("upid")
16                rdr.Close()
17                cmd.Dispose()
18                cnn.Close()
19
20                strUpName = " > " & strUpName
21
22                Show_UpPlace(newUpID)
23
24            End If
25
26        End If
27
28        rdr.Close()
29        cmd.Dispose()
30        cnn.Close()
31
32    End Sub
posted @ 2006-06-28 16:52 陈涛 阅读(459) | 评论 (2)编辑