<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-903260178737871187</id><updated>2012-02-16T01:13:18.830-08:00</updated><category term='asp.net'/><category term='SalesLogix'/><category term='sys admin'/><category term='SQL'/><category term='Ajax'/><category term='.NET'/><title type='text'>Software Development Notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-4665855176803860353</id><published>2009-02-11T16:37:00.000-08:00</published><updated>2009-02-11T16:53:20.389-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>FileUpload control does not work in Update Panel and workaround</title><content type='html'>&lt;p&gt; All file upload controls (includes asp, telerik, componentart, component factory and others) does not working in any AJAX update panels. This means if your upload control located in an update panel, control does not post the file. If you look to the posted file property of the control, you will see it null.&lt;br /&gt;&lt;/p&gt;  &lt;p&gt; This is a limitation comes from the XmlHttpRequest component, used in all AJAX  frameworks for asynchronous calls to the application. In order to upload a file  you should perform a &lt;strong&gt;full page postback&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;textarea rows="10" cols="60"&gt;&lt;asp:updatepanel id="UpdatePanel1" runat="server" updatemode="conditional"&gt;&lt;br /&gt;&lt;triggers&gt;&lt;br /&gt;  &lt;asp:postbacktrigger controlid="Button1"&gt;&lt;br /&gt;&lt;/triggers&gt;&lt;br /&gt;&lt;contenttemplate&gt;&lt;br /&gt;&lt;ews:datepicker id="DatePicker1" runat="server" usingupdatepanel="True" onselectionchanged="DatePicker1_SelectionChanged"&gt;&lt;br /&gt; &lt;asp:label id="Label1" runat="server"&gt;&lt;/asp:Label&gt;&lt;br /&gt; &lt;asp:fileupload id="FileUpload1" runat="server"&gt;&lt;br /&gt; &lt;asp:button id="Button1" runat="server" text="Upload" onclick="Button1_Click"&gt;&lt;/contenttemplate&gt;&lt;br /&gt;&lt;/asp:UpdatePanel&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;The key is at the Triggers.  Please note this will post a &lt;span style="font-weight: bold;"&gt;full postback&lt;/span&gt; even it's inside a Update Panel.&lt;br /&gt;&lt;/p&gt;Solutions are actually available for gmail like async file upload using iframe:&lt;br /&gt;http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/&lt;br /&gt;http://msmvps.com/blogs/luisabreu/archive/2006/12/14/uploading-files-without-a-full-postback.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-4665855176803860353?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/4665855176803860353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=4665855176803860353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4665855176803860353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4665855176803860353'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/02/fileupload-control-does-not-work-in.html' title='FileUpload control does not work in Update Panel and workaround'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-3413424532310870542</id><published>2009-02-02T12:14:00.000-08:00</published><updated>2009-02-02T12:21:28.969-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>OnChange vs. OnExitControl event in SalesLogix</title><content type='html'>Most of the user input controls have both OnChange and OnExitControl event. If no special reason, OnExitControl event should be handled instead of OnChange.&lt;br /&gt;&lt;br /&gt;OnChange event will be fired every single time the user enters anything, but OnExitControl is fired only when user leaves that control, which means user finished data input. It makes more sense to handle the change event after the user is done, instead of in the middle. Especially in the case of date time entry, if users enter date manually instead of picking from the calendar control, the OnChange event will give you the every first number user inputs, which will break your date function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-3413424532310870542?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/3413424532310870542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=3413424532310870542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/3413424532310870542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/3413424532310870542'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/02/onchange-vs-onexitcontrol-event-in.html' title='OnChange vs. OnExitControl event in SalesLogix'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-7101009397037401884</id><published>2009-01-30T11:53:00.001-08:00</published><updated>2009-02-12T16:27:09.148-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>Show DateTime value as boolean in SalesLogix DateGrid</title><content type='html'>One time I received a request to add a new column to a dategrid. The client wanted to show a datetime field in the grid to indicate if a thing has been completed or not. However there are already too many dates in the current grid and the client only cares about if the field has a value or not, instead of the real value itself.  I added the field but &lt;span style="font-weight: bold;"&gt;set the date type to be boolean, then in "Format" field put the desired wording&lt;/span&gt; when the value is not NULL. It will show blank when the datetime value is NULL. It perfectly solved the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-7101009397037401884?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/7101009397037401884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=7101009397037401884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/7101009397037401884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/7101009397037401884'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/show-datetime-value-as-boolean-in.html' title='Show DateTime value as boolean in SalesLogix DateGrid'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-5385321117341477835</id><published>2009-01-30T11:46:00.001-08:00</published><updated>2009-01-30T11:53:17.464-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>Another reason not to use Date type in SalesLogix</title><content type='html'>In my &lt;a href="http://devrus.blogspot.com/2008/12/datetimeedit-readonly-and-utc.html"&gt;previous post&lt;/a&gt; I logged some of my finding about Date vs. DateTime type. Here is another reason that Date type may cause problem.&lt;br /&gt;&lt;br /&gt;In TABLE1 we have a StartDate which is a Date type. Through SLOX UI everything works fine - 00:00:00 is used as the time value when saving and SLOX knows not to do any conversion.&lt;br /&gt;&lt;br /&gt;However there is a database view retrieving same field. It seems that SLOX doesn't know the exact type of the field in the view so it does the UTC-to-local conversion. The result is that we get back a value which is 7/8 hours earlier.&lt;br /&gt;&lt;br /&gt;I don't know why SLOX provides different Date and DateTime type in table design. In SQL 2005 they are all DateTime. Maybe it saves spaces in other databases?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-5385321117341477835?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/5385321117341477835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=5385321117341477835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5385321117341477835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5385321117341477835'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/another-reason-not-to-use-date-type-in.html' title='Another reason not to use Date type in SalesLogix'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-1251224093568940259</id><published>2009-01-21T14:41:00.000-08:00</published><updated>2009-01-21T15:24:47.596-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>SalesLogix Picklist management and tips</title><content type='html'>All the picklists and the picklist items are stored in sysdba.Picklist table. To get a list of all picklists:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;select * from sysdba.picklist where picklistid='PICKLISTLIST'&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;The ShortText field seems to store settings code for each picklist.  ItemID is the identifier for picklist. To get all items of a particular picklist:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;select * from sysdba.picklist where picklistid='k6UJ9A00032L'&lt;/blockquote&gt;Worth noting is the 'USERID' field. If the picklist's setting is to allow user edit (Users cannot edit items is unchecked), the USERID field will have the user ID of the user who inserts the item, and this item will be visible for that particular user only. Only USERID='ADMIN' are shared by all users. Additionally, non-admin user can only edit/delete their own items.&lt;br /&gt;&lt;br /&gt;There was a request that a business user wanted to be able to modify a picklist herself without asking ADMIN to do it and her change should be made available to all users. What I did is to insert a INSERT Trigger on Picklist table:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Declare @userID char(12), @itemID char(12)&lt;br /&gt; SELECT @userID = USERID, @itemID=itemID FROM INSERTED&lt;br /&gt;&lt;br /&gt;    IF @userID = 'U6UJ9A00000Q'&lt;br /&gt;    BEGIN&lt;br /&gt;        UPDATE sysdba.PickList SET USERID='ADMIN' WHERE ITEMID=@itemID&lt;br /&gt;    END&lt;/blockquote&gt;The outcome is that any picklist item this user ('U6UJ9A00000Q') adds will be available to all users (after a refresh of course). However, since the USERID is changed to ADMIN, this user can't change/delete afterward.&lt;br /&gt;&lt;br /&gt;The forms to manage the picklist are not listed in Plugin window. I assume that is the part that Sage doesn't allow you to customize. To give total control of picklists to a non-admin user, customized forms are needed. Basically you have to duplicate what SalesLogix already has, then add your function on top of that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-1251224093568940259?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/1251224093568940259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=1251224093568940259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1251224093568940259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1251224093568940259'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/saleslogix-picklist-management-and-tips.html' title='SalesLogix Picklist management and tips'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-1282121568621396701</id><published>2009-01-14T10:57:00.001-08:00</published><updated>2009-01-14T11:05:05.543-08:00</updated><title type='text'>Inserting background picture to Crystal Report</title><content type='html'>I don't know if this is only my dev machine - the background picture disappears after I reopen the report.&lt;p&gt;There are a few jpg files I want to use as the background of my report. I used Insert-&amp;gt;Picture, then select the file. Everything looks good (move to back). However after I close and re-open the report, the picture is blank. I can tell the object is still there (by the blue&lt;br /&gt;border when move mouse over) however it's just blank. Double clicking won't activate the edit mode.&lt;/p&gt;&lt;p&gt;I found that, in order for this picture to retain, I have to insert the picture to a Word file first then copy it in memory from Word. Copying from MSPaint doesn't work. Has to be Word. After inserting I had to adjust the size a little bit and the report file size is also much smaller than the version which I directly inserted picture file to.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-1282121568621396701?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/1282121568621396701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=1282121568621396701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1282121568621396701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1282121568621396701'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/inserting-background-picture-to-crystal.html' title='Inserting background picture to Crystal Report'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-7327036877778835168</id><published>2009-01-12T10:39:00.001-08:00</published><updated>2009-02-07T11:07:37.548-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Strategies to improve ASP.NET web app performance</title><content type='html'>There are few more things you can do other than adding hardware and caching...&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; combine small files. A lot of small files is slower to download than a few large files&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; move static resource files such as images, CSS, and JS files off of the &lt;a href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; servers, and set cache settings on that server. A server tuned for &lt;a href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; is not especially well-suited to server these files. From the client side, the browser can open two additional concurrent connections to download the  static files. Another benefit is that the browser doesn't need to send the cookies to the static files (ASP.NET cookies will be sent to web apps otherwise).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; think twice before breaking services into different server. All those out-of-process calls between the web servers and business object servers create a lot of overhead.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; IP affinity might be easier at the beginning (so that session can be managed in-process), but will create grief in the long run/bigger load. Scenarios: IIS process recyles, some megaproxy (ie AOL) will be bound to a single server etc&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; use compression. Yes it costs processor cycles but you typically have plenty of extra CPU capacity on a dedicated web server. IIS7 is even optimized so that when the processor gets really busy, it will suspend compression. Or check http://www.port80software.com/ for 3rd party solutions&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;optimizing the HTTP pipeline. There are some HTTP Modules  that sit in the ASP.NET request pipeline by default that you may not need. For example, if you don't need session management, and only use FormAuthentication, you can remove  Session, WindowsAuthentication, PassportAuthentication and FileAuthorization in httpmodules section.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; reduce or even completely disable the ViewState&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; GET is preferred over POST for AJAX calls. GET carries much smaller footprint than POST and POST costs one extra HTTP call than GET.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Put CSS Files on Top and JS Files at the Bottom. This way, the page would start displaying as soon as the CSS files are downloaded on the client side and won't wait for the JavaScript files which could be loaded in the end once the page is fully loaded and client could interact with it. ScriptManager also has a parameter LoadScriptsBeforeUI which can be used for this purpose&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; programmatic caching add complexity but has great benefit too&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;scaling database. Move to cluster, partition the tables, use dedicated reader and writer databases (and of course the sync process too)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-7327036877778835168?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/7327036877778835168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=7327036877778835168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/7327036877778835168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/7327036877778835168'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/strategies-to-improve-aspnet-web-app.html' title='Strategies to improve ASP.NET web app performance'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-918547754590578927</id><published>2008-12-18T10:37:00.000-08:00</published><updated>2008-12-18T10:45:13.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>A tricky side effect of Firefox's "remember password" feature</title><content type='html'>I think this is worth sharing.&lt;br /&gt;&lt;br /&gt;I have a page that allows customer to modify their account password. The password field and 'password again' field are pre-filled with user's password (encrypted). (I know this is not the best practice and they should be left blank - this is a purchased software package).&lt;br /&gt;&lt;br /&gt;What happens is that if no change made to the password, the client script that verifies password match always report unmatched password. The HTML source code does show both password fields are the same. But somehow this code&lt;blockquote&gt;document.getElementById("password").value&lt;/blockquote&gt;always gets user's real password, not the encrypted one in the HTML source code. It turns out that it's the Firefox's "Remember Password" feature automatically puts in the remembered password, regardless the specified value in the source.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson learned: use different ID for login and password change screen.  However the best practice is to leave it blank and not to update it if password is blank.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-918547754590578927?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/918547754590578927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=918547754590578927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/918547754590578927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/918547754590578927'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/12/tricky-side-effect-of-firefoxs-remember.html' title='A tricky side effect of Firefox&apos;s &quot;remember password&quot; feature'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-5305978648914574954</id><published>2008-12-12T14:45:00.000-08:00</published><updated>2008-12-12T14:53:11.610-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Cache with HttpContext.Current.Items</title><content type='html'>This is a often overlooked yet very powerful cache option. In my BlogEngine  multiple user project, multiple components of the page need to resolve blogName/ID, user roles etc. Since each time same user may hit different blog and this user will have different role for each blog, this is a ever-changing value. This per-request cache is a perfect solution.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;if (HttpContext.Current.Items["blogName"] != null)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;                 return HttpContext.Current.Items["blogName"].ToString();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;     // parse the blogName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-5305978648914574954?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/5305978648914574954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=5305978648914574954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5305978648914574954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5305978648914574954'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/12/cache-with-httpcontextcurrentitems.html' title='Cache with HttpContext.Current.Items'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-934539291829936992</id><published>2008-12-12T14:36:00.000-08:00</published><updated>2008-12-12T15:12:57.955-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>SLOX RecordChanges not working</title><content type='html'>It's confirmed that "RecordChanges" checkbox on a controls property doesn't always work (SLXDev forum). Today I testified it too:&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;select * from sysdba.history where datediff( hour, startdate, GetUTCDate()) &lt; 48&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;It only gives me a handful records while there are so many updates. The returned history are all in default SLOX objects. So I guess the custom objects/tables (e.g. Policy etc) have problems.  I was thinking to put change logging in database triggers, but a few concerns: &lt;ul&gt;&lt;li&gt;it may not always have valid ModifyUser value&lt;/li&gt;&lt;li&gt;to add a new field to be logged is tedious and error-prone&lt;/li&gt;&lt;li&gt;when we remove a database field, we have to remember to remove it from the trigger&lt;br /&gt;&lt;/li&gt;&lt;li&gt;any unhandeled error will prevent saving. &lt;/li&gt;&lt;/ul&gt;That said, this isn't a very practical approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-934539291829936992?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/934539291829936992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=934539291829936992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/934539291829936992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/934539291829936992'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/12/slox-recordchanges-not-working.html' title='SLOX RecordChanges not working'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-5150054617874512294</id><published>2008-12-12T11:52:00.000-08:00</published><updated>2009-01-12T12:03:06.569-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Redirect any pages in a old site to corresponding pages in new site</title><content type='html'>This mostly involves moving a site to another hosting company, since we can't simply change the IP address of the new server to be the DNS-registered IP.  DNS will be changed to the new IP but it takes hours for it to populate to all ISPs.  We can blindly redirect all request to the home page of the new server, but that means no matter what page/querystring user requests, he/she will see the home page. Not very user friendly.&lt;br /&gt;&lt;br /&gt;Step 1: register a new sub domain (e.g. new.myblog.com), so that user's ISP will get the brand new IP address.&lt;br /&gt;&lt;br /&gt;Step 2: in old server, add a Wildcard application maps to have ASP.NET engine handle all requests (html, gif etc)&lt;br /&gt;&lt;br /&gt;Step 3: in global.asax, redirect user in Application_BegineRequest:&lt;br /&gt;&lt;blockquote&gt;string url = HttpContext.Current.Request.Url.AbsolutePath;      &lt;br /&gt;string QueryParams = HttpContext.Current.Request.QueryString.ToString();&lt;br /&gt; if ( QueryParams != "")&lt;br /&gt;{        Response.Redirect("http://new.myblog.com" + url + "?"+ QueryParams);       }&lt;br /&gt;else&lt;br /&gt;{           Response.Redirect("http://new.myblog.com" + url );       }&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-5150054617874512294?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/5150054617874512294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=5150054617874512294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5150054617874512294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5150054617874512294'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2009/01/redirect-any-pages-in-old-site-to.html' title='Redirect any pages in a old site to corresponding pages in new site'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-1227417565362655307</id><published>2008-12-02T14:59:00.000-08:00</published><updated>2009-01-22T12:35:16.902-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SalesLogix'/><title type='text'>DateTimeEdit Readonly and UTC conversion</title><content type='html'>If a DateTimeEdit control is set to ReadOnly, user can still modifiy it through the popup date picker and the change WILL be saved. So uncheck "Enabled" is safer.&lt;br /&gt;&lt;br /&gt;=============================================&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SLOX DB provider has Date and DateTime 2 different data types&lt;/span&gt; - even though in SQL server they are all created as DateTime. However SLOX DB provider treats them differently. If it's a DateTime type, it converts it to UTC time and convert back to local time when getting it. However if it's a Date type, when saving the data, SLOX DB provider will always use the local date value and either 1) use current local time as time 2) use 00:00:00.  (Among other scenarios,  if the editing is done directly in a grid view control, 00:00:00 will be used) When retrieving the data, it doesn't do any conversion - except the Crystal Report, in which case it always try to convert to local time. This is annoying.&lt;br /&gt;&lt;br /&gt;Some of the fields should be date only but were created as DateTime type. It created problem when I try to copy that field to another table which I created the field as Date type. The copying was done in SQL so SLOX doesn't get a chance to do the appropriate conversion.  The outcome is some dates are displayed one day ealier in UI.  I had to do the UTC to local conversion in SQL query to fix it.&lt;br /&gt;&lt;br /&gt;However since it always converts to local time regardless of date type in Crystal Report, I would recommend to always use DateTime type.&lt;br /&gt;&lt;br /&gt;===========================================&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Internally, SLX stores it's schema information in SECTableDefs table.&lt;/span&gt;  This command will list all fields that has &lt;span style="font-weight: bold;"&gt;Date&lt;/span&gt; type:&lt;br /&gt;&lt;blockquote&gt;select * from sysdba.sectabledefs where datetimetype='D'&lt;/blockquote&gt;'U' in above field indicates a DateTime type.&lt;br /&gt;&lt;br /&gt;The Architech interface does not allow you to change the data type of an existing field.  However here is a workaround in database level:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;UPDATE sysdba.sectabledefs SET datetimetype='U' WHERE TableName='[my-table]' AND FieldName='[my-field]' AND datetimetype='D' -- this changes the date type&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UPDATE [my-table] SET [my-field] = DateAdd(hour, 8, [my-field]) WHERE DatePart(hour, [my-field]) &lt; 8 -- this fixes the existing data so that it works for conversion.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-1227417565362655307?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/1227417565362655307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=1227417565362655307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1227417565362655307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/1227417565362655307'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/12/datetimeedit-readonly-and-utc.html' title='DateTimeEdit Readonly and UTC conversion'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-3153657423758976430</id><published>2008-11-24T15:07:00.001-08:00</published><updated>2009-01-21T15:31:50.385-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>GetSubDomain</title><content type='html'>private static string GetSubDomain(Uri url)&lt;br&gt;{&lt;br&gt;   if (url.HostNameType == UriHostNameType.Dns)&lt;br&gt;   {&lt;br&gt;     string host = url.Host;&lt;br&gt;     if (host.Split(&amp;#39;.&amp;#39;).Length &amp;gt; 2)&lt;br&gt;     {&lt;br&gt;       int lastIndex = host.LastIndexOf(&amp;quot;.&amp;quot;);&lt;br&gt;       int index = host.LastIndexOf(&amp;quot;.&amp;quot;, lastIndex - 1);&lt;br&gt;       return host.Substring(0, index);&lt;br&gt;     }&lt;br&gt;   }&lt;p&gt;     return null;&lt;br&gt;}&lt;p&gt;From: &lt;a href="http://www.webpronews.com/expertarticles/2006/11/30/retrieve-subdomain-from-a-url-in-c"&gt;http://www.webpronews.com/expertarticles/2006/11/30/retrieve-subdomain-from-a-url-in-c&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-3153657423758976430?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/3153657423758976430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=3153657423758976430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/3153657423758976430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/3153657423758976430'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/11/getsubdomain.html' title='GetSubDomain'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-334528266577220725</id><published>2008-11-18T11:37:00.001-08:00</published><updated>2008-12-12T14:34:33.777-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>script to shink log</title><content type='html'>&lt;span style="font-family:courier new,courier,mono;"&gt;First switch to that database,then run this:&lt;br /&gt;&lt;br /&gt;==================================&lt;br /&gt;&lt;br /&gt;DECLARE @DB varchar(100)&lt;br /&gt;SET @DB = DB_NAME()&lt;br /&gt;BACKUP LOG @DB WITH TRUNCATE_ONLY&lt;br /&gt;DBCC SHRINKDATABASE (@DB, TRUNCATEONLY )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;==================================&lt;br /&gt;It worked very well for me in SQL 2005.&lt;br /&gt;&lt;br /&gt;This works too but not very convenient:&lt;br /&gt;&lt;br /&gt;alter database &amp;lt;mydb&amp;gt; set recovery simple&lt;br /&gt;go&lt;p&gt;checkpoint&lt;br /&gt;go&lt;/p&gt;&lt;p&gt;alter database &amp;lt;mydb&amp;gt; set recovery full&lt;br /&gt;go&lt;/p&gt;&lt;p&gt;backup database pubs to disk = 'c:\mydb.bak' with init&lt;br /&gt;go&lt;/p&gt;&lt;p&gt;dbcc shrinkfile (N'mydb_log' , 1)&lt;br /&gt;g&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-334528266577220725?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/334528266577220725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=334528266577220725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/334528266577220725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/334528266577220725'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/11/script-to-shink-log.html' title='script to shink log'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-4088161008166909581</id><published>2008-10-29T10:35:00.001-07:00</published><updated>2008-11-18T11:40:53.028-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Fix user mapping after restoring database to another server instance</title><content type='html'>Often when you restore a backup from SQL server you run into funky&lt;br&gt;problems with users. Suppose you have login calvin and you restore a&lt;br&gt;database from another server that already has user called calvin. When&lt;br&gt;you try to map the server calvin to the database calvin,  you might&lt;br&gt;get the error:&lt;p&gt;Error 15023: User or role &amp;#39;calvin&amp;#39; already exists in the current database.&lt;p&gt;To fix this:&lt;p&gt;sp_change_users_login &amp;#39;update_one&amp;#39;, &amp;#39;calvin&amp;#39;, &amp;#39;calvin&amp;#39;, &amp;#39;password&amp;#39;&lt;br&gt;-- this command will link the server user to the database level user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-4088161008166909581?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/4088161008166909581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=4088161008166909581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4088161008166909581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4088161008166909581'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/10/fix-user-mapping-after-restoring.html' title='Fix user mapping after restoring database to another server instance'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-4672499409088004943</id><published>2008-10-23T21:59:00.001-07:00</published><updated>2008-11-18T11:41:10.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sys admin'/><title type='text'>xcopy</title><content type='html'>echo ---------------- &amp;gt;&amp;gt; c:\backup_log.log&lt;br&gt;echo \calvin\*.* &amp;gt;&amp;gt; c:\backup_log.log&lt;br&gt;xcopy d:\calvin\*.* &amp;quot;\\&lt;a href="http://192.168.1.99"&gt;192.168.1.99&lt;/a&gt;\F$\calvin-backup\calvin\*.*&amp;quot; /H /D&lt;br&gt;/E /C /R /Y&amp;gt;&amp;gt; c:\backup_log.log&lt;br&gt;time /t &amp;gt;&amp;gt; &amp;quot;c:\backup_log.log&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-4672499409088004943?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/4672499409088004943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=4672499409088004943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4672499409088004943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/4672499409088004943'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/10/xcopy.html' title='xcopy'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-6980664025502081214</id><published>2008-09-26T17:01:00.001-07:00</published><updated>2008-11-18T11:41:02.738-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>truncate SQL 2005 Log file</title><content type='html'>Unlike SQL 2000, you can&amp;#39;t conveniently just truncate the transaction&lt;br&gt;log. But you can do this:&lt;p&gt;   1. Highlight the database-&amp;gt; Tasks-&amp;gt;Detach..-&amp;gt; Click OK&lt;br&gt;   2. Go to log file folder -&amp;gt; rename the xxx_log.ldf to something else&lt;br&gt;   3. Highlight Databases-&amp;gt;Attach…-&amp;gt; Click Add -&amp;gt; add the database MDF&lt;br&gt;file, highlight the log file in the lower part of the window and click&lt;br&gt;the &amp;#39;Remove&amp;#39; button.&lt;br&gt;   4. After this is done, you can verify the contents of the attached&lt;br&gt;database and then delete the log file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-6980664025502081214?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/6980664025502081214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=6980664025502081214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6980664025502081214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6980664025502081214'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/09/truncate-sql-2005-log-file.html' title='truncate SQL 2005 Log file'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-5831806028949690832</id><published>2008-08-18T10:55:00.001-07:00</published><updated>2008-08-18T10:57:07.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><title type='text'>AJAX Calendar Extender only shows partial weekdays</title><content type='html'>The Calendar extender in my page only shows 5 days in a week, instead&lt;br /&gt;of a full 7 days. There is no parameters controlling this behavior.&lt;br /&gt;After some investigation I found that's because I have defined padding&lt;br /&gt;in my stylesheet for TD:&lt;p&gt;TD {padding-left:5px;padding-right:5px;}&lt;/p&gt;&lt;p&gt;Generally it's not a good idea to change the general TD style,&lt;br /&gt;especially third-party control will be used. I put the padding in my&lt;br /&gt;own table class then problem solved!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-5831806028949690832?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/5831806028949690832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=5831806028949690832' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5831806028949690832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/5831806028949690832'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/08/ajax-calendar-extender-only-shows.html' title='AJAX Calendar Extender only shows partial weekdays'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-675244530719719843</id><published>2008-08-06T12:28:00.000-07:00</published><updated>2008-08-06T12:35:26.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><title type='text'>Call server postback from ModalPopup extender</title><content type='html'>The Atlas AJAX Toolkit has a very convenient ModalPopup extender.  However by default it doesn't do post back on button clicks, even the event is wired with the button:&lt;br /&gt;&lt;blockquote&gt;&lt; runat="server" id="btnAddExistingPart" text="Add" cssclass="SplashButton" onclick="btnAddExistingPart_Click"&gt;&lt;/blockquote&gt;Upon click it only dismiss the modal popup.&lt;br /&gt;&lt;br /&gt;You have to explicitly call the post back client method to initiate the post back:&lt;br /&gt;&lt;blockquote&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;btnAddExistingPart.OnClientClick = "__doPostBack('" + btnAddExistingPart.UniqueID + "','')";&lt;br /&gt;...&lt;br /&gt;}&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-675244530719719843?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/675244530719719843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=675244530719719843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/675244530719719843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/675244530719719843'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/08/call-server-postback-from-modalpopup.html' title='Call server postback from ModalPopup extender'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-6854471193899981232</id><published>2008-08-04T13:26:00.001-07:00</published><updated>2008-08-06T12:23:11.785-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sys admin'/><title type='text'>System admin script</title><content type='html'>To lock the workstation (tested on Win2K/XP): rundll32 user32.dll,LockWorkStation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-6854471193899981232?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/6854471193899981232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=6854471193899981232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6854471193899981232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6854471193899981232'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/08/system-admin-script.html' title='System admin script'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-2410411566103776248</id><published>2008-07-17T10:57:00.001-07:00</published><updated>2008-08-06T12:24:30.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>OleDbCommand doesn't support named parameters</title><content type='html'>&lt;!-- Converted from text/rtf format --&gt;  &lt;p&gt;&lt;span style="font-family:Arial;"&gt;When calling a parameterized stored procedure, if you pass parameters to a&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlCommand&lt;/span&gt; &lt;span style="font-family:Arial;"&gt;object &lt;/span&gt; &lt;/p&gt;  &lt;p&gt;        &lt;span style="font-family:Arial;"&gt;(i.e. &lt;/span&gt;&lt;br /&gt;  &lt;span style="font-family:Courier New;"&gt;cmd.Parameters.AddWithValue(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);font-family:Courier New;" &gt;"@productID"&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:100%;"  &gt;, strProductID); &lt;/span&gt;&lt;br /&gt;  &lt;span style="font-family:Courier New;"&gt;cmd.Parameters.AddWithValue(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);font-family:Courier New;" &gt;"@productName"&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;, strName); &lt;/span&gt;&lt;br /&gt;  &lt;span style=";font-family:Courier New;font-size:100%;"  &gt;...&lt;/span&gt;&lt;br /&gt;  &lt;span style=";font-family:Courier New;font-size:100%;"  &gt;)&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Arial;"&gt;SqlCommand will correctly map the value with the parameter regardless of the order these&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;AddWithValue&lt;/span&gt; &lt;span style="font-family:Arial;"&gt;methods are called. However, OleDbCommand doesn't support named parameters (MS confirmed it: &lt;/span&gt;&lt;a href="http://support.microsoft.com/kb/316744"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Arial;" &gt;http://support.microsoft.com/kb/316744&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="font-family:Arial;"&gt;). You have to make sure the order you call the&lt;/span&gt; &lt;span style="font-family:Courier New;"&gt;AddWithValue&lt;/span&gt; &lt;span style="font-family:Arial;"&gt;method matches the order of your SP parameters. Obviously the SqlCommand is much more convinient because you can simply skip some parameters that have default values defined in SP. In my database utility class for SqlClient, I can pack the parameters in a HashTable and pass them in:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;        &lt;span style="font-family:Courier New;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;public&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;DataSet&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; ExecuteSPQuery(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;string&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; spName, &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;Hashtable&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; param)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlConnection&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; myConnection = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;null&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;DataSet&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; dataSet = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;new&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;DataSet&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                myConnection = ConnectToDB();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlCommand&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; cmd = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;new&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlCommand&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                cmd.Connection = myConnection;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                cmd.CommandType = &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;CommandType&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;.StoredProcedure;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                cmd.CommandText = spName;&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-family:Courier New;" &gt;// a different way of looping a hashtable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;if&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; (param != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;null&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;foreach&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; (&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;DictionaryEntry&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; de &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;in&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; param)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                        cmd.Parameters.AddWithValue(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);font-family:Courier New;" &gt;"@"&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; + de.Key.ToString(), de.Value.ToString());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                }&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; myAdapter = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;new&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;" &gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                myAdapter.SelectCommand = cmd;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                myAdapter.Fill(dataSet);&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier New;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;finally&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;if&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; (myConnection != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;null&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                    myConnection.Close();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            }&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;if&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; (dataSet != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;null&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &amp;amp;&amp;amp; dataSet.Tables.Count == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;return&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;null&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;else&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Courier New;" &gt;return&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; dataSet;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;        }&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Arial;"&gt;However for OldDb client, I have to use a queue to do that, and anytime there is a change to the SP, I have to change everywhere that queue is populated, or to define a method for each SP I call. How nice...&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-2410411566103776248?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/2410411566103776248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=2410411566103776248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/2410411566103776248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/2410411566103776248'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/07/oledbcommand-doesnt-support-named.html' title='OleDbCommand doesn&apos;t support named parameters'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-903260178737871187.post-6862797992415233968</id><published>2008-07-15T10:51:00.000-07:00</published><updated>2008-07-15T11:46:53.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Sorted view in SQL 2005</title><content type='html'>It looks like something new in SQL 2005. If you try to add a "order by" in the view, the management studio will automatically add a "TOP (100) PERCENT" after the SELECT clause. However this only works in "preview" mode. If you query "select * from [view_name]", you still get the records unsorted.&lt;br /&gt;&lt;br /&gt;To get the sorted records from a view, a workaround is to use&lt;br /&gt;   SELECT top 1000000000 * FROM&lt;br /&gt;&lt;br /&gt;This is not ideal but it works if you know your data count range. Microsoft &lt;a href="http://support.microsoft.com/kb/926292"&gt;has a hotfix for this&lt;/a&gt;. I can't believe MS let SQL 2005 out of the door with such a bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/903260178737871187-6862797992415233968?l=devrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devrus.blogspot.com/feeds/6862797992415233968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=903260178737871187&amp;postID=6862797992415233968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6862797992415233968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/903260178737871187/posts/default/6862797992415233968'/><link rel='alternate' type='text/html' href='http://devrus.blogspot.com/2008/07/sort-view-in-sql-2005.html' title='Sorted view in SQL 2005'/><author><name>Calvin998</name><uri>http://www.blogger.com/profile/09288479625521451599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
