Most Voted
986 Views
1 Votes
5 Answers
322 Views
1 Votes
1 Answers
335 Views
1 Votes
1 Answers

QSQLite Error: Database is locked

I am new to Qt development, the way it handles threads (signals and slots) and databases (and SQLite at that). It has been 4 weeks that I have started working on the mentioned technologies. This is the first time I'm posting a question on SO and I feel I have done research before coming to you all. This may look a little long and possibly a duplicate, but I request you all to read it thoroughly once before dismissing it off as a duplicate or tl;dr.

Context:

I am working on a Windows application that performs a certain operation X on a database. The application is developed in Qt and uses QSQLite as database engine. It's a single threaded application, i.e., the tables are processed sequentially. However, as the DB size grows (in number of tables and records), this processing becomes slower. The result of this operation X is written in a separate results table in the same DB. The processing being done is immaterial to the problem, but in basic terms here's what it does:

Read a row from Table_X_1
Read a row from Table_X_2
Do some operations on the rows (only read)
Push the results in Table_X_Results table (this is the only write being performed on the DB)

Table_X_1 and Table_X_2 are identical in number and types of columns and number of rows, only the data may differ.

What I'm trying to do:

In order to improve the performance, I am trying to make the application multi-threaded. Initially I am spawning two threads (using QtConcurrentRun). The two tables can be categorized in two types, say A and B. Each thread will take care of the tables of two types. Processing within the threads remains same, i.e., within each thread the tables are being processed sequentially.

The function is such that it uses SELECT to fetch rows for processing and INSERT to insert result in results table. For inserting the results I am using transactions.

I am creating all the intermediate tables, result tables and indices before starting my actual operation. I am opening and closing connections everytime. For the threads, I create and open a connection before entering the loop (one for each thread).

THE PROBLEM:

Inside my processing function, I get following (nasty, infamous, stubborn) error:

QSqlError(5, "Unable to fetch row", "database is locked")

I am getting this error when I'm trying to read a row from DB (using SELECT). This is in the same function in which I'm performing my INSERTs into results table. The SELECT and the INSERT are in the same transaction (begin and commit pair). For INSERT I'm using prepared statement (SQLiteStatement).

Reasons for seemingly peculiar things that I am doing:

  1. I am using QtConcurrentRun to create the threads because it is straightforward to do! I have tried using QThread (not subclassing QThread, but the other method). That also leads to same problem.
  2. I am compiling with DSQLITE_THREADSAFE=0 to avoid application from crashing. If I use the default (DSQLITE_THREADSAFE=1), my application crashes at SQLiteStatement::recordSet->Reset(). Also, with the default option, internal SQLITE sync mechanism comes into play which may not be reliable. If the need be, I'll employ explicit sync.
  3. Making the application multi-threaded to improve performance, and not doing this. I'm taking care of all the optimizations recommended there.
  4. Using QSqlDatabase::setConnectOptions with QSQLITE_BUSY_TIMEOUT=0. A link suggested that it will prevent the DB to get locked immediately and hence may give my thread(s) appropriate amount of time to "die peacefully". This failed: the DB got locked much frequently than before.

Observations:

  1. The database goes into lock only and as soon as when one of the threads return. This behavior is consistent.
  2. When compiling with DSQLITE_THREADSAFE=1, the application crashes when one of the threads return. Call stack points at SQLiteStatement::recordSet->Reset() in my function, and at winMutexEnter() (called from EnterCriticalSection()) in sqlite3.c. This is consistent as well.
  3. The threads created using QtConcurrentRun do not die immediately.
  4. If I use QThreads, I can't get them to return. That is to say, I feel the thread never returns even though I have connected the signals and the slots correctly. What is the correct way to wait for threads and how long it takes them to die?
  5. The thread that finishes execution never returns, it has locked the DB and hence the error.
  6. I checked for SQLITE_BUSY and tried to make the thread sleep but could not get it to work. What is the correct way to sleep in Qt (for threads created with QtConcurrentRun or QThreads)?
  7. When I close my connections, I get this warning:

    QSqlDatabasePrivate::removeDatabase: connection 'DB_CONN_CREATE_RESULTS' is still in use, all queries will cease to work.

    Is this of any significance? Some links suggested that this warning arises because of using local QSqlDatabase, and will not arise if the connection is made a class member. However, could it be the reason for my problem?

Further experiments:

  1. I am thinking of creating another database which will only contain results table (Table_X_Results). The rationale is that while the threads will read from one DB (the one that I have currently), they will get to write to another DB. However, I may still face the same problem. Moreover, I read on the forums and wikis that it IS possible to have two threads doing read and write on same DB. So why can I not get this scenario to work?
  2. I am currently using SQLITE version 3.6.17. Could that be the problem? Will things be better if I used version 3.8.5?

I was trying to post the web resources that I have already explored, but I get a message saying "I'd need 10 reps to post more than 2 links". Any help/suggestions would be much appreciated.

multithreading qt sqlite database-locking

Sampat Karasu Sampat Asked on Aug 08, 2016 in Technology
326 Views
0 Votes
0 Answers

ASP not Rendering Produced page

have an ASP Page that is not getting any errors, however after the page loads the page is rendered as a blank page. However if I copy the produced code, and place that into another ASP page and load that page it renderes just fine. It is almost like I need something at the end of the code to say now that you are done running the code show the html that was produced.

<%@ Page AutoEventWireup="true" Language="c#" CodeBehind="DefaultCS.aspx.cs" Inherits="DefaultCS.WebForm1"%>



string[] projects = null;
//string winlogon = Request.ServerVariables["LOGON_USER"];
//string User = winlogon.Substring(8, winlogon.Length - 8);
projects = renderProjectIDs("HCQ763");
string Level1 = "";
string Level2 = "";
string Level3 = "";
int linedone = 0;



Response.Write("<!DOCTYPE html>" + System.Environment.NewLine);

Response.Write("<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">" + System.Environment.NewLine);

Response.Write("<head runat=\"server\"> </head>" + System.Environment.NewLine);
Response.Write("    <body>" + System.Environment.NewLine);

    Response.Write("<form id=\"form1\" runat=\"server\">" + System.Environment.NewLine);
    Response.Write("<asp:TreeView runat=\"server\" Width=\"105px\">" + System.Environment.NewLine);
    Response.Write("<Nodes>" + System.Environment.NewLine);
    Response.Write("<asp:TreeNode Text=\"Capital Projects\" Value=\"Capital Projects\">" + System.Environment.NewLine);

string[] tempArray = new string[2];
for(int y=0; y<projects.Length; y++)
  {
    tempArray = projects[y].Split('|');
    linedone = 0;
    if ((Level3 != "") && (Level3 != tempArray[5])) //If a level 3 has been built and we come back up we need to make an end TreeNode
    {
        Response.Write("</asp:TreeNode>" + System.Environment.NewLine); //End the Last Level 3 Node
    }
    if ((Level2 != "") && (Level2 != tempArray[3]))  //If a level 2 has been built and we come back up we need to make an end TreeNode
    {
        Response.Write("</asp:TreeNode>" + System.Environment.NewLine); //End the last Level 2 Node
        Level3 = "";
    }
    if ((Level1 != "") && (Level1 != tempArray[1])) //If a level 1 has been built and we come back up we need to make an end TreeNode
    {
        Response.Write("</asp:TreeNode>" + System.Environment.NewLine); //End the last Level 1 Node
        Level2 = "";
    }





    if ((Level1 != tempArray[1]) && (tempArray[1] != tempArray[3])) //Level 1 Node has changes
    {
       Response.Write("<asp:TreeNode Text=\"" + tempArray[0] + "\" Value=\"" + tempArray[0] + "\">" + System.Environment.NewLine); //Write the new Level 1 Node
       Level1 = tempArray[1];
    }
    else if (tempArray[1] == tempArray[3]) // Level 2 and Level 3 ID in the database are the same this means that the Record is a CIP
    {
        //Write out the CIP
        linedone = 1;
        Response.Write("<asp:TreeNode Value=\"" + tempArray[8] + "\" Text=\"" + tempArray[1] + "\" NavigateUrl=\"CapitalText.aspx?CID=" + tempArray[8] + "\" Target=\"frame_main\"></asp:TreeNode>" + System.Environment.NewLine);
    }  
    if ((Level2 != tempArray[3]) && (tempArray[3] != tempArray[5])) //Level 2 Node Changed
    {
        Response.Write("<asp:TreeNode Text=\"" + tempArray[2] + "\" Value=\"" + tempArray[2] + "\">" + System.Environment.NewLine);   //Write the new Level 2 Node
        Level2 = tempArray[3];
    } else if ((tempArray[3] == tempArray[5]) && (linedone == 0)) // Level 2 and Level 3 ID in the database are the same this means that the Record is a CIP
        {
            //Write out the CIP
            linedone = 1;
            Response.Write("<asp:TreeNode Value=\"" + tempArray[8] + "\" Text=\"" + tempArray[2] + "\" NavigateUrl=\"CapitalText.aspx?CID=" + tempArray[8] + "\" Target=\"frame_main\"></asp:TreeNode>" + System.Environment.NewLine);
        }
    if ((Level3 != tempArray[5]) && (tempArray[5] != tempArray[7]))
    {
        Response.Write("<asp:TreeNode Text=\"" + tempArray[4] + "\" Value=\"" + tempArray[4] + "\">" + System.Environment.NewLine); //Write the new Level 3 Node
        Level3 = tempArray[5];
    }
    else if ((tempArray[5] == tempArray[7]) && (linedone == 0)) // IF Level 3 and Level 4 IDs in the database are the same this means that the Record is a CIP
    {
           //Write out the CIP
        linedone = 1;
        Response.Write("<asp:TreeNode Value=\"" + tempArray[8] + "\" Text=\"" + tempArray[4] + "\" NavigateUrl=\"CapitalText.aspx?CID=" + tempArray[8] + "\" Target=\"frame_main\"></asp:TreeNode>" + System.Environment.NewLine);
    }
    if ((tempArray[5] != tempArray[7]) && (linedone == 0))
    {
        Response.Write("<asp:TreeNode Value=\"" + tempArray[8] + "\" Text=\"" + tempArray[6] + "\" NavigateUrl=\"CapitalText.aspx?CID=" + tempArray[8] + "\" Target=\"frame_main\"></asp:TreeNode>" + System.Environment.NewLine);
    }




 }


          Response.Write("</asp:TreeNode>" + System.Environment.NewLine);
        Response.Write("</asp:TreeNode>" + System.Environment.NewLine);
    Response.Write("</Nodes>" + System.Environment.NewLine);
Response.Write("</asp:TreeView>" + System.Environment.NewLine);
  Response.Write("</form>" + System.Environment.NewLine);
Response.Write("</body>" + System.Environment.NewLine);

Response.Write("</html>" + System.Environment.NewLine);
%>

This is the Code that is produced

<!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server"> </head>
        <body>
    <form id="form1" runat="server">
    <asp:TreeView runat="server" Width="105px">
    <Nodes>
    <asp:TreeNode Text="Capital Projects" Value="Capital Projects">
    <asp:TreeNode Text="Hennepin County Total" Value="Hennepin County Total">
    <asp:TreeNode Text="Public Works" Value="Public Works">
    <asp:TreeNode Text="Transportation Roads & Bridges" Value="Transportation Roads & Bridges">
    <asp:TreeNode Value="2986401" Text="2986401  CSAH 3 - Construct Lake St ramps at I-35W - Participation" NavigateUrl="CapitalText.aspx?CID=2986401" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="2070500" Text="2070500  CSAH 5 - Reconst. Franklin Ave Bridge over Mississippi River" NavigateUrl="CapitalText.aspx?CID=2070500" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="2142600" Text="2142600 CSAH 20 - Reconstruct Blake Road from TH 7 to Excelsior Blvd" NavigateUrl="CapitalText.aspx?CID=2142600" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="2141200" Text="2141200  CSAH 28 - Participate in MnDOT I-494 Ramp reconstruction" NavigateUrl="CapitalText.aspx?CID=2141200" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="2141100" Text="2141100 CSAH 30 - Reconst 93rd Ave N fr Xylon Ave to East of Winnetka" NavigateUrl="CapitalText.aspx?CID=2141100" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="2974800" Text="2974800  CSAH 34 - Reconst Normandale fr W 94th St to Mt Normandale Dr" NavigateUrl="CapitalText.aspx?CID=2974800" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Housing Community Works and Transit" Value="Housing Community Works and Transit">
    <asp:TreeNode Value="1002195" Text="1002195   Economic Development Infrastructure Fund" NavigateUrl="CapitalText.aspx?CID=1002195" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001560" Text="1001560   Penn Avenue Community Works" NavigateUrl="CapitalText.aspx?CID=1001560" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031720" Text="0031720   Community Works Corridor Planning" NavigateUrl="CapitalText.aspx?CID=0031720" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001648" Text="1001648   Lowry Avenue NE Community Works" NavigateUrl="CapitalText.aspx?CID=1001648" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031721" Text="0031721   Fort Snelling Upper Post" NavigateUrl="CapitalText.aspx?CID=0031721" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002318" Text="1002318   Bottineau LRT Community Works" NavigateUrl="CapitalText.aspx?CID=1002318" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031591" Text="0031591   Community Works Northwest Corridor" NavigateUrl="CapitalText.aspx?CID=0031591" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031805" Text="0031805   Southwest LRT Community Works" NavigateUrl="CapitalText.aspx?CID=0031805" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031742" Text="0031742   Minnehaha-Hiawatha Community Works" NavigateUrl="CapitalText.aspx?CID=0031742" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Environmental  Services" Value="Environmental  Services">
    <asp:TreeNode Value="0031704" Text="0031704   HERC Facility Preservation & Improvement" NavigateUrl="CapitalText.aspx?CID=0031704" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002150" Text="1002150   HERC Pres & Improvements 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002150" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031814" Text="0031814   HERC District Energy" NavigateUrl="CapitalText.aspx?CID=0031814" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000319" Text="1000319   Transfer Station Facility Pres 2012-2015" NavigateUrl="CapitalText.aspx?CID=1000319" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002151" Text="1002151   Transfer Station Pres 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002151" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Property Services" Value="Property Services">
    <asp:TreeNode Value="0031822" Text="0031822   Environmental Health & Safety 2011-2015" NavigateUrl="CapitalText.aspx?CID=0031822" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002153" Text="1002153   Environmental Health & Safety 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002153" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000874" Text="1000874   Government Center Rehabilitation" NavigateUrl="CapitalText.aspx?CID=1000874" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031823" Text="0031823   Facility Preservation 2011-2015" NavigateUrl="CapitalText.aspx?CID=0031823" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002154" Text="1002154    Facility Preservation 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002154" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031730" Text="0031730   Multi-building Critical Power" NavigateUrl="CapitalText.aspx?CID=0031730" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031825" Text="0031825   Southdale Regional Ctr Preservation & Remodeling" NavigateUrl="CapitalText.aspx?CID=0031825" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002308" Text="1002308   Ridgedale Regional Center Preservation" NavigateUrl="CapitalText.aspx?CID=1002308" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031824" Text="0031824   Building Auto. Sys Upgrades 2011-2015" NavigateUrl="CapitalText.aspx?CID=0031824" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002155" Text="1002155    Building Auto. Sys Upgrades 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002155" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001928" Text="1001928   HCGC Admin Space Efficiency & Security Improvements" NavigateUrl="CapitalText.aspx?CID=1001928" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002242" Text="1002242   Countywide Security Equipment Replacement" NavigateUrl="CapitalText.aspx?CID=1002242" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031827" Text="0031827   Public and Programmatic Furniture Replacement" NavigateUrl="CapitalText.aspx?CID=0031827" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031672" Text="0031672   Accessibility Modifications" NavigateUrl="CapitalText.aspx?CID=0031672" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002156" Text="1002156   Accessibility Modifications 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002156" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002158" Text="1002158   Carpet Replacement Program 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002158" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000328" Text="1000328   701 Building Facility Preservation" NavigateUrl="CapitalText.aspx?CID=1000328" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002159" Text="1002159   701 Building Facility Preservation 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002159" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000329" Text="1000329   701 Building Office Space Modifications" NavigateUrl="CapitalText.aspx?CID=1000329" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002157" Text="1002157    General Office Space & Furniture Mods 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002157" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Public Safety and Judiciary" Value="Public Safety and Judiciary">
    <asp:TreeNode Text="Emergency Management" Value="Emergency Management">
    <asp:TreeNode Value="1001563" Text="1001563   Emergency Mgmt Vehicle Storage Bldg" NavigateUrl="CapitalText.aspx?CID=1001563" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="District Court" Value="District Court">
    <asp:TreeNode Value="0031746" Text="0031746   Government Center C-11 Modifications" NavigateUrl="CapitalText.aspx?CID=0031746" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001655" Text="1001655   Traffic Violations Bureau Improvements" NavigateUrl="CapitalText.aspx?CID=1001655" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000932" Text="1000932   Jury Assembly Relocation" NavigateUrl="CapitalText.aspx?CID=1000932" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001168" Text="1001168   Conciliation Court Relocation" NavigateUrl="CapitalText.aspx?CID=1001168" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031841" Text="0031841   Hearings & Fines Office Relocation" NavigateUrl="CapitalText.aspx?CID=0031841" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031838" Text="0031838   Self Help Center Relocation" NavigateUrl="CapitalText.aspx?CID=0031838" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031840" Text="0031840   Brookdale Third Courtroom Completion" NavigateUrl="CapitalText.aspx?CID=0031840" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000931" Text="1000931   Courtroom Communications Syst Refurb 2013-2015" NavigateUrl="CapitalText.aspx?CID=1000931" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002161" Text="1002161   Courtroom Communications Syst Refurb 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002161" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001562" Text="1001562   FJC Courtroom Remodel" NavigateUrl="CapitalText.aspx?CID=1001562" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Community Corrections" Value="Community Corrections">
    <asp:TreeNode Value="0031789" Text="0031789   Community Corrections Security Modifications" NavigateUrl="CapitalText.aspx?CID=0031789" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000320" Text="1000320   Community Corrections Facility Pres 2012-2015" NavigateUrl="CapitalText.aspx?CID=1000320" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002162" Text="1002162   Community Corrections Facility Pres 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002162" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000321" Text="1000321   Community Corrections Flooring Replacement" NavigateUrl="CapitalText.aspx?CID=1000321" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031774" Text="0031774   Probation Furniture & Space Efficiency Impr." NavigateUrl="CapitalText.aspx?CID=0031774" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031842" Text="0031842   CHS Facility Modifications" NavigateUrl="CapitalText.aspx?CID=0031842" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002292" Text="1002292   DOCCR Office Safety Audit Modifications" NavigateUrl="CapitalText.aspx?CID=1002292" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031843" Text="0031843   ACF Women's Section Expansion" NavigateUrl="CapitalText.aspx?CID=0031843" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002307" Text="1002307   Hennepin-Ramsey Joint Juvenile Corrections Facility" NavigateUrl="CapitalText.aspx?CID=1002307" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Sheriff" Value="Sheriff">
    <asp:TreeNode Value="0031762" Text="0031762   Sheriffs Holding Area Security Modifications" NavigateUrl="CapitalText.aspx?CID=0031762" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001654" Text="1001654   Sheriff's Enforcement Services Div HQ Facility Mods" NavigateUrl="CapitalText.aspx?CID=1001654" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031775" Text="0031775   Sheriff's Crime Lab Expansion/Remodeling" NavigateUrl="CapitalText.aspx?CID=0031775" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Health" Value="Health">
    <asp:TreeNode Text="North Point Health & Wellness Center" Value="North Point Health & Wellness Center">
    <asp:TreeNode Value="0031735" Text="0031735   North Minneapolis Community Wellness Center" NavigateUrl="CapitalText.aspx?CID=0031735" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Medical Examiner" Value="Medical Examiner">
    <asp:TreeNode Value="1002306" Text="1002306   New Regional Medical Examiner's Facility" NavigateUrl="CapitalText.aspx?CID=1002306" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Medical Center" Value="Medical Center">
    <asp:TreeNode Value="1000323" Text="1000323   HCMC Asset Preservation 2012-2015" NavigateUrl="CapitalText.aspx?CID=1000323" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002163" Text="1002163   HCMC Asset Preservation 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002163" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002512" Text="1002512   HCMC Ambulatory Outpatient Specialty Center" NavigateUrl="CapitalText.aspx?CID=1002512" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031753" Text="0031753   HCMC Simulation Center (and $ placeholder for AOSC)" NavigateUrl="CapitalText.aspx?CID=0031753" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002513" Text="1002513   HCMC Loading Dock Relocation" NavigateUrl="CapitalText.aspx?CID=1002513" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001170" Text="1001170   HCMC In-Patient Bed Consolidation" NavigateUrl="CapitalText.aspx?CID=1001170" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002293" Text="1002293   HCMC Surgery Center Expansion & Relocation" NavigateUrl="CapitalText.aspx?CID=1002293" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001169" Text="1001169   HCMC Blue Building Psychiatric Renovation" NavigateUrl="CapitalText.aspx?CID=1001169" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Health Administration" Value="Health Administration">
    <asp:TreeNode Value="1002160" Text="1002160   1800 Chicago Detox Ctr Refurbishment" NavigateUrl="CapitalText.aspx?CID=1002160" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Human Services" Value="Human Services">
    <asp:TreeNode Text="Human Services & Public Health" Value="Human Services & Public Health">
    <asp:TreeNode Value="1002165" Text="1002165   HSPHD Sobering Ctr Development" NavigateUrl="CapitalText.aspx?CID=1002165" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031821" Text="0031821   HSPHD Satellite Facilities" NavigateUrl="CapitalText.aspx?CID=0031821" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001083" Text="1001083   HSPHD Office Space Reconfiguration" NavigateUrl="CapitalText.aspx?CID=1001083" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001597" Text="1001597   HSPHD South Minneapolis Regional Service Center" NavigateUrl="CapitalText.aspx?CID=1001597" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Information Technology" Value="Information Technology">
    <asp:TreeNode Value="1000325" Text="1000325   IT Community Connections Initiative" NavigateUrl="CapitalText.aspx?CID=1000325" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1002166" Text="1002166   IT Community Connectivity 2016-2020" NavigateUrl="CapitalText.aspx?CID=1002166" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000978" Text="1000978   IT Furniture & Space Efficiency Modifications" NavigateUrl="CapitalText.aspx?CID=1000978" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000979" Text="1000979   IT Data Center Upgrades" NavigateUrl="CapitalText.aspx?CID=1000979" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Resident & Real Estate Services" Value="Resident & Real Estate Services">
    <asp:TreeNode Value="0031794" Text="0031794   HCGC A-5 / A-6 Space Remodeling" NavigateUrl="CapitalText.aspx?CID=0031794" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Municipal Building Commission" Value="Municipal Building Commission">
    <asp:TreeNode Value="0031317" Text="0031317   MBC Life/Safety Improvements" NavigateUrl="CapitalText.aspx?CID=0031317" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031483" Text="0031483   MBC Mechanical Systems Upgrades" NavigateUrl="CapitalText.aspx?CID=0031483" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031715" Text="0031715   MBC Interior Court & Elevator Modifications" NavigateUrl="CapitalText.aspx?CID=0031715" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031847" Text="0031847   MBC Critical Power" NavigateUrl="CapitalText.aspx?CID=0031847" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000935" Text="1000935   MBC Exterior Improvements" NavigateUrl="CapitalText.aspx?CID=1000935" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="0031828" Text="0031828   MBC ADC Plumbing" NavigateUrl="CapitalText.aspx?CID=0031828" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Housing & Redevelopment Authority" Value="Housing & Redevelopment Authority">
    <asp:TreeNode Value="1001950" Text="1001950   Affordable Housing 2014 - 2018" NavigateUrl="CapitalText.aspx?CID=1001950" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001951" Text="1001951   Transit Oriented Development 2014 - 2018" NavigateUrl="CapitalText.aspx?CID=1001951" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1001585" Text="1001585   Strategic Acquisition" NavigateUrl="CapitalText.aspx?CID=1001585" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    <asp:TreeNode Text="Regional Railroad Authority" Value="Regional Railroad Authority">
    <asp:TreeNode Value="1000899" Text="1000899   Southwest LRT Preliminary Engineering" NavigateUrl="CapitalText.aspx?CID=1000899" Target="frame_main"></asp:TreeNode>
    <asp:TreeNode Value="1000941" Text="1000941  Bottineau LRT" NavigateUrl="CapitalText.aspx?CID=1000941" Target="frame_main"></asp:TreeNode>
    </asp:TreeNode>
    </asp:TreeNode>
    </Nodes>
    </asp:TreeView>
    </form>

    <!-- Visual Studio Browser Link -->
    <script type="application/json" id="__browserLink_initializationData">
        {"appName":"Internet Explorer","requestId":"5a18a494e8e9467fac49ce9161940b5b"}
    </script>
    <script type="text/javascript" src="http://localhost:65311/13b018507f1c41668db5e77d50bb8154/browserLink" async="async"></script>
    <!-- End Browser Link -->

    </body>
    </html>

c# asp.net rendering

 

Sampat Karasu Sampat Asked on Aug 09, 2016 in Technology
381 Views
0 Votes
41 Answers

Can a person have both bulimia / anorexia

What is bulimia? Is it the same as anorexia? Can a person have both?

Sampat Karasu Sampat Asked on Aug 10, 2016 in Health
343 Views
0 Votes
1 Answers

What are the nutritional benefits of beef?

 What are the nutritional benefits of beef? 

Kumar Karsasu Kumar Asked on Aug 11, 2016 in Health
342 Views
0 Votes
1 Answers

I really need to lose about 20 pounds

I started an exercise program approximately 2 months ago. At that time, I started walking about 1.5 miles a day 5 days a week and using a health rider 10 minutes a day, 3 - 5 days a week. I also began limiting my fat intake, eating more fruits and vegetables and less junk. Now, why is it that I have only lost 1 (one) pound in that time.

I really need to lose about 20 pounds and decided to do it sensibly. But due to the results I've been having, one of those dumb crash diets is looking better and better.

Kumar Karsasu Kumar Asked on Aug 12, 2016 in Health
335 Views
0 Votes
1 Answers

Is it ok to eat sushi and cheese?

Is it ok to eat sushi and cheese?

Sampat Karasu Sampat Asked on Aug 15, 2016 in Health
345 Views
0 Votes
1 Answers

I get infected?

I poked myself with a sewing needle will I get infected?

Kumar Karsasu Kumar Asked on Aug 15, 2016 in Health
343 Views
0 Votes
1 Answers