UAC Administrator Access

11/27/2009

Ever need to run your app to request Administrator access?
Well in Visual Studio 2008 it is very easy:

Right click on your project and press the button for “View UAC Settings”

Change the Level to:

level=”requireAdministrator”


SQL CE Takes too much Memory

11/27/2009

This is a blast from the past, I was thinking about how to promote my new blog so I signed into http://www.vbforums.com to answer a few questions, and I found this posting, something I figured out and posted about 5 years ago.  This was two posts, the first one describing my problem and the second one gives the solution.

—– (POST #1)

I have an MC 1000. At first I thought it was perfect, ultra low cost, and no extra features that were never used. At first they run perfectly, but after you insert a few hundred records into its CE Database it starts running slower and slower until it is almost unusable. I have the users reboot the device and it runs fine again for a while but does the same thing again. All my code is doing is adding records to the SQL CE DB.

Anyone have similar problems? I am thinking of switching over to a XML file instead of SQL CE.

I have converted as much storage memory into program memory and it has helped, but only for a while.

—– (POST #2)

I came across the following MS Article while researching this problem:

http://support.microsoft.com/?kbid=842191

It mentions:

Q17: Does setting my ADO Recordset to ‘nothing’ reclaim any memory?

A17: Generally, the answer is “yes.” However, Microsoft recommends that all your applications use set rs=nothing and set cn=nothing when you are finished using them. Database engines can take a fair amount of memory, and it is best not to leak memory.

Usually, Microsoft Visual Basic eventually releases the memory. However, there have been some cases where the memory is not released quickly enough and you can run out of memory on the device, especially if you have a particularly bad memory leak.

Made me think: am I setting all my objects to nothing? I went through my code and found that although I was setting all my Connections = Nothing I wasn’t setting the SqlCeCommand Objects to nothing when I was done with them. I added a few cmd = Nothing lines and now my App runs Faster then ever and doesn’t seem to be stopping for anything.

Whoo!



Visual Studio 2008 Locks or Freezes in ASPX

11/26/2009

I have been having this issue for a while now, it seems to happen at random, but it’s pretty consistent. What happens is suddenly when you are working with a project in Visual Studio 2008 with an ASPX page your visual studio will lock up and become unresponsive forever. You have to crash it, and pray that you saved recently. Here are some links that I found to help me fix it.

http://abdullin.com/journal/2009/5/12/visual-studio-2008-locks-or-freezes-in-aspx.html

http://geekswithblogs.net/hinshelm/archive/2009/07/19/office-2010-gotcha-2-visual-studio-2008-locks.aspx

What worked for me was finding:

C:\Program Files (x86)\Common Files\microsoft shared\
OFFICE12\Office Setup Controller\Setup.exe

I ran it as an administrator and told it to do a repair. Once this was done not only did Visual Studio stop locking up, but loading the ASPX pages is faster as well.


Dim x as New

11/24/2009

Let me say in my not so humble opinion that ‘AS NEW’ is dead in my eyes. I always hated back in my VB6 days that some variables had to be declared “AS NEW” while others had to just “AS”. As soon as I discovered in .NET that you never have to use “AS NEW” but instead you can use “Dim X AS MyObj = New MyObj” I was sold.

Sometimes when I am lazy I still use “AS NEW” but I think it’s a bad habit, and should never appear in ‘good’ code.


A small rant

11/24/2009

Ok so there is one thing about .NET that bugs me, and it’s not the design. Let me know If I ever do this, but it seems like every example in the help documentation never tells you what namespaces are imported. I hate it when I see some System.Net.Whatever.lala.AwsomeFunction in a code example but all they have is AwesomeFunction. Then I have to spend a few mins google’n AwesomeFunction Namespace or looking it up in the MSDN Library. If you are using an import or a reference in your example code, you should include it.

Like I said If I am guilty of doing this let me know, but I always try to keep it in mind when posting code.


Generate a Unique ID

11/24/2009

Here is some code I wrote to generate always unique ID’s (Only Unique to One application, two applications could generate the same ID, however it is very unlikely)

Note that I used the keyword “Shared” by doing this your code can get an ID without creating a new object.

The SyncLock Command makes sure only one thread can access it at a time.

The Sleep one millisecond command makes sure if two threads requested data at the same time, they both get different ID’s.

Public Class UniqueID

 Public Shared ReadOnly Property Generate() As String   
  Get     
   Dim UniqueID As String

     SyncLock "GENID"

       System.Threading.Thread.Sleep(1)

	Dim d As String = Now.DayOfYear       
	Dim y As String = Now.Year       
	Dim h As String = Now.Hour
	Dim m As String = Now.Minute
	Dim s As String = Now.Second    
	Dim ms As String = Now.Millisecond       
	
	If d.Length = 1 Then d = "00" & d       
	If d.Length = 2 Then d = "0" & d       
	If h.Length = 1 Then h = "0" & h       
	If m.Length = 1 Then m = "0" & m       
	If s.Length = 1 Then s = "0" & s       
	If ms.Length = 1 Then ms = "00" & ms       
	If ms.Length = 2 Then ms = "0" & ms

       UniqueID = y & d & h & m & s & ms

     End SyncLock

     Return UniqueID

   End Get 
 End Property

End Class

Using Ajax To Avoid Timeouts

11/23/2009

So I thought since I mentioned AJAX in my last post that I would include how to use it. Not that I am an expert as I just decided to use AJAX for the first time today, and so I’m very new to it, but it was way easy to use.

First thing you do is you have to add a ScriptManager to your page. This is easy to do, it’s found in the VS UI tool menu under AJAX Extensions. You don’t have to do anything with it other then drop it on your page. You Can edit the AysncPostBackTimeout property if you know your tasks are going to take a while.

Then drop in a AJAX UpdatePanel. This is where the magic happens, anything you put inside this box, say like a command button, when pressed will not cause your entire page to do a post back. You can drop in a Label and update it’s text without having to reload the whole page.

Add a AJAX UpdageProgress control and you can put some text in it like “Please wait while your request is processed..” and bam, you have a user message that will be displayed while the AJAX process is running.

One little trick about if you use a Button, I added this code so that the user can’t press the button twice:

Button1.OnClientClick = "this.disabled = true;__doPostBack(this.name,'')"

It’s really that easy. Here is some code:

.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: Consolas, “Courier New”, Courier, Monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

<asp:UpdateProgress ID="UpdateProgress1" runat="server"
AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
Processing.. Please Wait
</ProgressTemplate>
</asp:UpdateProgress>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="cmdProcess" runat="server" Text="Process"
onclick="cmdProcess_Click">
</ContentTemplate>
</asp:UpdatePanel>

Soap Client Timeout WebServices

11/23/2009

Ok so I created this blog post so that when someone else searches the internet for this problem they can find my simple solution. I hate it when I search on google for over 20 mins trying to find some simple solution. I Hope this helps someone.

I have a web service which is taking in a tab delimited data file and put it into a SQL database. But I had problems, my web browser kept timing out before the processing was done. Oddly enough the web service finishes the task anyway, but I have a user issue with them getting an error message.

So the fist thing I did was I used AJAX to place a message on the screen that the file was being processed and I set the AysncPostbackTimeout in the Script Manger to 0 so it would never time out. But this only solved one problem, the browser stopped displaying an error message, but the underlining call was still dying, and so I could not update the web site once it was done.

To fix that I updated the InnerChannel.OperationTimeout to an hour by doing so:
(Web Service Soap Client).InnerChannel.OperationTimeout = New System.TimeSpan(1, 0, 0)

This makes it wait an hour before it gives a timeout error (more then enough time)

I should change all the values to 5 mins as that now if there really is an error It will make the user wait an hour.


My VB Blog

11/23/2009

So I deicded to start a blog to give whomever cares insight on all the little tricks I do In VB.NET. I have been programming in Basic my entire life, I was 8 years old when I wrote my first computer program on a VIC 20 in good old Basic. I have been professionally programming in VB for over 10 years. I started in VB 6, and moved onto VB.NET the same day Microsoft released it. At first I hated it, but I quickly learned to love it.

I don’t know why you would want to program in any other language. It’s fast and easy, and with Visual Studio’s amazing intellisense I’d never switch to a different platform.