John Stagich's Blog

Microsoft .Net Developer

January 2012 Quick Hits

clock January 13, 2012 11:38 by author JohnStagich
  • How to remove a .Net project/solution from Team Foundation Server (TFS) source code control?  From within Visual Studio 2010, File->Source Control->Change Source Control..., and then unbind the project/solution.  Here is the link where I found this information.


December 2011 Quick Hits

clock December 22, 2011 12:31 by author JohnStagich
  •  Here is another way to clear browser cache with Internet Explorer: F12, Ctrl+R

 

  • I wanted to include the build date in an "about" form for a Windows desktop application.  Below is code to get the build date of the application.

    ' Get Build Date information.

Dim _ExecutingAssemblyName As String = Assembly.GetExecutingAssembly.GetName().Name
Dim _ExecutingAssembly As Assembly = Assembly.GetExecutingAssembly

Try
  Dim _buildDate As Date = File.GetLastWriteTime(_ExecutingAssembly.Location)
  lblBuildDate.Text = lblBuildDate.Text +
" " + _ExecutingAssemblyName + ", " + _buildDate.ToString
Catch
 
lblBuildDate.Text = " Error trying to find Build Date."
EndTry

 

  •  Here is a link to a free interactive .NET tutorial from Motti Shaked.


July 2011 Quick Hits

clock July 29, 2011 13:00 by author johnstagich
  • Here is a link to David Padbury’s blog on using Isotope with Knockout.js.  Check it out!

  • This issue has been covered before in other blog posts, but I want to reiterate what you can do when you get the following error message when working with Microsoft SQL Server: The database could not be exclusively locked to perform the operation.  (I received this message when I tried to change the name of a database.)

A fix for this problem is to set the restrict access property of the database to a SINGLE_USER.  Next, make your change (In my case I changed the name of the database).  Followed by, setting the restrict access property back to MULTI_USER .

You can set the restrict access property through either T-SQL code or from SQL Server Management Studio.

T-SQL Code:

ALTER DATABASE [database_name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [database_name] SET MULTI_USER

SQL Management Studio:

Right mouse click on the database and select properties.  Under Select a page, click on Options.  Scroll down to the State Group and find the Restrict Access property and change its setting accordingly.

Here is the link where I found this fix.

  • A link to Orchard CMS.  Orchard CMS is a free, open source content management system that allows users to rapidly create web sites on the Microsoft ASP.NET platform. It is built on a flexible extensibility framework that enables developers and customizers to provide additional functionality through extensions and themes.



June 2011 Quick Hits

clock June 14, 2011 09:44 by author johnstagich
  • I had a request to have a company logo that was incorporated into a larger image contain a link to a new company website.  The solution: Create an HTML image map and refer to that image map in the <img> tag.  I used Paint.Net to get the coordinates of the logo for the coords attribute of the <area> tag.  For more details, follow this link.  Thanks Nebojsa Pajkic!
 

<map name="CompanyLogo">

  <area shape="poly" coords="32,92,89,65,147,96,87,122,48,114" href="http://NewCompanyWebSite.com" />

</map>

<img src="images/largeImageWithLogo.jpg"  usemap="#CompanyLogo">

  • Here is a link on how to optimize WPF performance.  Here is link for a performance profiling tool for WPF from MSDN.



Mimic/Simulate Merge Command in SQL 2005

clock April 5, 2011 10:12 by author johnstagich

We had in place a daily process where we imported item information from SAP into an Items table in a SQL 2005 database.  The SAP information was placed in a .txt file and then bulk inserted into the table using the T-SQL Bulk Insert command.

We were then asked to modify this process.  Instead of completely overwriting the Items table in the database, we needed to merge the SAP item information into the Items table.  That is, we needed to update and insert rows in the Items table using the SAP .txt file as input.

If the database was an SQL 2008 database, we would have used the Merge command to merge the information; however, we were using SQL 2005.  Below are the steps and T-SQL I created to simulate the Merge command.
 

1)      Created a replica of the Items table called Load_Items

2)      Ran the following T-SQL

-- Load SAP Item information into Load_Items table with Bulk Insert command.

Truncate table Load_Items  

BULK INSERT Load_Items
FROM  '\\servername\SAP_Items.txt'
WITH (FORMATFILE = ‘\\servername\SAP_Items.FMT')

  /*
   Merge updated and new Item information into Items table by deleting rows in the Items table that have the same key value (Item_Code) as that
   in the Load_Items table and then insert those rows back (update) plus any new rows (insert) from the Load_Items table.
*/

Delete from Items
Where Item_Code In (Select Item_Code from Load_Items)

Insert Into Items
Select * from Load_Items



Argument for a Natural Primary Key over a Surrogate Primary key

clock March 9, 2011 09:53 by author johnstagich

I was querying an Order Header table and was coming up with confusing results (the result set had too many rows).  The table used an Identity column as the primary key.  The table also contained an order confirmation number column that should have been unique.  To make a long story short, the reason I was getting confusing results was because there were rows in the Order Header table that contained the same order confirmation number.  This happened when I imported a more recent version of the Order Header table from another database, but neglected to also import a more recent version of the table that controlled the generation of order confirmation numbers.  When I then created new orders, the new Order Header rows were created using older confirmation numbers, and as a consequence, duplicate order confirmation numbers were entered into the table.  This scenario would NOT have occurred if the order confirmation number was the primary key.  An error would have occurred when I tried to add a new order that had a confirmation number that already existed in the Order Header table.

Here are some links to choosing a primary key that I found interesting.

http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html

http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

http://decipherinfosys.wordpress.com/2007/02/01/surrogate-keys-vs-natural-keys-for-primary-key/

http://www.mssqltips.com/tip.asp?tip=1600



February 2011 Quick Hits

clock February 28, 2011 12:13 by author johnstagich
  • I made some changes to .html files on a production web site, yet when I went to my computer, the changes did not take effect (using IE 7).   I then cleared cache (Tools -> Internet Options -> Browsing History -> Delete).  Clearing cache did not work either.  The changes did not show up.  I then reloaded the start page by bypassing cache.  To bypass cache, hold the Cntrl key and press F5 or hold the Cntrl key and press the Refresh button in the toolbar.  Bypassing cache solved the problem.  My changes showed up.

  • To avoid the security warning you get after copying your Microsoft Access 2007 program to a new directory, copy your Access program to the C:\Program Files\Microsoft Office\Office12\ACCWIZ folder.

  • Microsoft SQL Server 2008 R2 Report Builder 3.0 provides an intuitive report authoring environment for business and power users. It supports the full capabilities of SQL Server 2008 R2 Reporting Services. The download provides a stand-alone installer for Report Builder 3.0.

  • Fiddler (Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet) is in IE 9.  In IE 9, press the F12 button to bring up the Devloper Tools window.

 



January 2011 Quick Hits

clock January 4, 2011 10:08 by author johnstagich
  • From Andy Warren, use Scope_Identity() function instead of @@Identity when retrieving identity for most recently added row to a table.

Scope_Identity is the best way to get the identity value of a just inserted row. It's a drop in replacement for @@Identity and a good way to make sure that you don't have problems in the future if someone adds a trigger that inserts into another table with an identity column.  Also, some more information on the subject from David Hayden.

  • I had linked an SQL table in Microsoft Access 2007.  I could not make any edits to the table in Access.  The fix?  The SQL table did not have a primary key defined.  Once I defined a primary key for the table in SQL, and then in Access updated the table in the Linked Table Manager (right mouse click on table in table objects), I was able to make edits to the table in Access.  I found the solution here.

 



December 2010 Quick Hits

clock December 22, 2010 12:51 by author johnstagich

  • I had created a stored procedure that included bulk insert statements.  The bulk insert needed to access .txt files from a secure folder.  An SQL Agent ran the stored procedure under the sqlservice account.  Before testing the SQL Agent, we modified the security settings of the secure folder to allow the sqlservice account to read from the folder.  A test was run and the stored procedure generated an error stating that is could not access a .txt file in the secure folder.  Why was the stored procedure unable to access the .txt file in the secure folder?  It turns out in order for the new folder permissions granted to the sqlservice account to take hold, the SQL Server instance where the SQL Agent ran needed to be restarted.  After we restarted the SQL Server instance, the stored procedure was then able to access the files in the secure folder.
  • From Pete Brown's blog, here is an excellent video by Jason Dolinger on MVVM.


October 2010 Quick Hits

clock October 1, 2010 14:48 by author JohnStagich

I changed the name of a database in Microsoft Sql Server 2005.  The database happened to be the default database for a user.  The next time the user tried to connect to the SQL server instance, they received the following error message: Cannot Open User Default Database.  Here is the fix.

SQL Server 2005

You can use the sqlcmd utility to change the default database in SQL Server 2005. To do this, follow these steps:

  1. Click Start, click Run, type cmd, and then press ENTER.
  2. Use one of the following methods, depending on the kind of authentication that the SQL Server login uses:

    If the SQL Server login uses Microsoft Windows authentication to connect to the instance, type the following at the command prompt, and then press ENTER:

    sqlcmd –E -S InstanceName –d master

    If the SQL Server login uses SQL Server authentication to connect to the instance, type the following at the command prompt, and then press ENTER:

    sqlcmd -S InstanceName -d master -U SQLLogin -P Password

    Note InstanceName is a placeholder for the name of the SQL Server 2005 instance to which you are connecting. SQLLogin is a placeholder for the SQL Server login whose default database has been dropped. Password is a placeholder for the SQL Server login password.
  3. At the sqlcmd prompt, type the following, and then press ENTER:
    ALTER LOGIN SQLLogin WITH DEFAULT_DATABASE = AvailDBName
    Note AvailDBName is a placeholder for the name of the existing database that can be accessed by the SQL Server login in the instance.
  4. At the sqlcmd prompt, type GO, and then press ENTER.

 

  • Custom Sort from Andy Warren.  How to get United States to appear first in a drop down list of countries. 

    Select CountryName
    From Countries
    order by
      Case when CountryName = 'United States' then 0 else 1 end,
      CountryName

     
  • I was having trouble parsing an Update query that was using an inner join.  It turned out that I was missing the From clause in my update statement.
Update Tablename
Set Field1 = 100
Inner Join --Wrong
Update Tablename
Set Field1 = 100
Fom Tablename
Inner Join --Correct 
  • In Sequel Server Reporting Services (SSRS), how to hide a textbox (follow link, go to using Complex Expressions, about halfway down within Complex Expressions, Hide a text box on the design surface...) based on a boolean field value in the recordset:
Open Textbox properties Dialaog box, click on Visibility tab, and enter =Not fields!VoidFlag.Value in the Expression box.   



About the author

I am the owner of Stagich Software Consulting.  Stagich Software Consulting specializes in developing Microsoft .Net/Microsoft SQL software applications.

 

Calendar

<<  February 2012  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Month List

Category list

None

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

Sign In