Today I experienced the following issue:
I had a class where I would open a SqlConnection, do some actions, and then in the deconstructor I closed the SqlConnection.
~Dumper()
{
this._sqlConnection.Close();
}
Unfortunately every time my program ran it stopped with this error:

Internal .Net Framework Data Provider error 1.
(click to enlarge)
Well it seems that you cannot close a SqlConnection in a ~Deconstructor block.
So the solution is implementing the IDisposable interface
internal class Dumper : IDisposable
{
private readonly SqlConnection _sqlConnection;
public Dumper()
{
//build and open the connection
this._sqlConnection = new SqlConnection(Settings.Default.ConnectionString);
this._sqlConnection.Open();
}
/// <summary>
/// Some function
/// </summary>
/// <param name="param">param</param>
public void SomeFunction(SomeParameter param)
{
}
public void Dispose()
{
this._sqlConnection.Close();
}
}
And to use it you do this:
using (Dumper dumper = new Dumper())
{
dumper.SomeFunction(myParam);
}
This will cause dumper to be Disposed after the } and it will no longer be available
1 Comment »
A friend of mine asked me to generate pages from a List<T>. This is my implementation:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Pager
{
static class Program
{
static void Main()
{
List<int> list = new List<int>();
//add 26 items
for (int x = 0; x < 26; x++)
{
list.Add(x);
}
//generate pages
List<int>[] pagesList = Pager<int>(list, 4);
Console.WriteLine("Please examine pagesList");
System.Diagnostics.Debugger.Break();
}
/// <summary>
/// Converts a collection of T to an array of pages
/// </summary>
/// <typeparam name="T">The type of items in the list, can be inferred most of the time</typeparam>
/// <param name="list">The list to page</param>
/// <param name="itemsPerPage">Items per page</param>
/// <returns>An array of lists, pages if you will</returns>
static List<T>[] Pager<T>(ICollection<T> list, int itemsPerPage)
{
int pages = (int)Math.Ceiling((double)list.Count / itemsPerPage);
List<T>[] pagesList = new List<T>[pages];
for (int currentPage = 0; currentPage < pages; currentPage++)
{
pagesList[currentPage] = list.Skip(currentPage * itemsPerPage).Take(itemsPerPage).ToList();
}
return pagesList;
}
}
}
No Comments »
Posted by Kristof in .NET, C#
Some functions expect an array with a minimum size. While this is generally bad coding sometimes you can’t avoid it (e.g. with csv files).
That’s when this piece of code comes in handy: (it’s an extension method, so it only works on .NET 3.5)
public static class ArrayHelper
{
/// <summary>
/// Expands an array to the given <paramref name="size"/>
/// </summary>
/// <typeparam name="T">The type of the array (not neccesairy, can be infered).</typeparam>
/// <param name="array">The array</param>
/// <param name="size">The size it should become</param>
/// <returns>The array expanded to the given size</returns>
public static T[] Expand<T>(this T[] array, int size)
{
if (size < array.Length)
{
throw new ArgumentException("size < array.Length, this will cause data to be truncated, canceling", "size");
}
T[] list = new T[size];
for (int index = 0; index < array.Length; index++)
{
list[index] = array[index];
}
return list;
}
}
Usage:
class Program
{
static void Main(string[] args)
{
string[] array = new string[] { "test1", "test2", "test3" };
//array1 has a length of 3
Console.WriteLine("array.Length = {0}", array.Length);
array = array.Expand<string>(10);
//now array has a length of 10
Console.WriteLine("array.Length = {0}", array.Length);
Console.ReadLine();
}
}
Enjoy
No Comments »
This is something I’ve been thinking about a lot. When do I throw an exception? Do I program with exceptions? Do I catch those exceptions.
Consider this piece of code:
public Product GetProduct(int id)
{
//get the product, or null if not found
Product p = //...
return p;
}
Now you can ask yourself the following question:
Is it ok to return null if the product is not found? After all, the calling layer assumes that we’ll be getting a Product, not a null.
So now the calling layer needs to check if the product != null.
It would be exceptional if no product was found.
So in my opinion you throw an exception if no product is found. And that get’s handled in the calling layer.
But on the other hand: if you would just return a null and test on that in the calling layer you would use less resources since exception throwing is expensive.
I’d still go with the first one since it goes better with my consume code thoughts.
But this is an agreement you need to make across your team, and across your API.
2 Comments »
Posted by Kristof in 7, OS, Windows
So yesterday I reinstalled my laptop because some beta driver was acting up, no big deal. I had both of my partitions secured with Bitlocker (and a BIOS password set up) so that my laptop is secure.
After formatting I noticed that my C drive wasn’t encrypted anymore (which is obvious, it was formatted).
But my D drive looked like this:
It was locked. Fortunately I printed my recovery key so I was able to unlock the drive.
Please print the keys, and keep them safe!
No Comments »
Posted by Kristof in OS, Windows
Well not really my computer, but my girlfriend’s. It needed some updating (you know how people are, not updating & stuff).
Adobe Reader already sets 2 programs in startup. A speed launcher and another one which I am too lazy to identify. If your application is too slow then optimize it, don’t treat the symptoms.
Then our good slow friend Java. Always had their speed launcher (symptom treatment!!) in startup, but guess what also added a service.

What the f*ck? I’m moving closer and closer to not install Java on new pcs, since it’s a burdon to manage and keep up to date!
No Comments »
Something not many people know: when you need to compare 2 strings in C#.NET you can use the == operator overload:
if(firstString == secondString)
{
//...
}
This is case sensitive. But when you need to ignore the case please don’t use this:
if(firstString.ToLower() == secondString.ToLower())
{
//...
}
or this:
if(firstString.ToLower().Equals(secondString.ToLower()))
{
//...
}
A Framework provides you with utilities, please use them. They are usually better than your implementation!
Use this:
if (firstString.Equals(secondString, StringComparison.OrdinalIgnoreCase))
{
//...
}
StringComparison is an enum. So please look at the options
1 Comment »
Ever wanted a getJSON which does a post?
Here it is:
jQuery.extend({
postJSON: function(url, data, callback)
{
$.post(url, data, callback, "json");
}
});
No Comments »
To connect to your SQL Server 2008 Express edition over network you need to enable the following options:
First: open SQL Configuration Manager (SQLServerManager10.msc):

Double click on ‘Named Pipes’ and enable them.
‘
Then click ‘OK’ on the bottom. Now we have the access set up, now we need to start the service.
Now open Services (services.msc) and double click on ‘SQL Server Browser’:

Set the startup type to ‘Manual’ or ‘Auto’. That’s up to you. I have it on manual for security reasons. Then you can click start. But we have one more step to do. In the window copy the path to the executable (‘C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe’).
Then go to your firewall in your control panel and add the sqlbrowser path to allowed programs.
You’ll eventually see this:

You can also check the public, but that’s not necessary for me. If you set the sqlbrowser service to manual, you’ll need to start it each time you want it (just by making a shortcut to the path we copied above.) If not, it’ll start at startup
Good luck and post your questions below!
I’m going to try replication between 2 SQL Servers Express in one of these days and I’ll post the results on that too!
No Comments »
Today I was trying to find out a way to use jQuery in one of my views. Since I include the jQuery in my master page I bumped into the problem that Visual Studio doesn’t recognize the jQuery in the child page.
So I tried some stuff, and I thought: I might share it as well here so you don’t spend time on looking up everything like I did.
First thing I tried is using the ///<reference path … /> syntax.
But this doesn’t work in <script …></script> tags. It only works in real (.js) javascript files.
I then used this ‘hack’ to make the intellisense work (and I don’t like hacks).
<% if (false)
{ %>
<script type="text/javascript" src="~/Scripts/jquery-1.3.2-vsdoc.js"></script>
<% } %>
Stuff like this really makes my code look like a hack. I’ll test tonight if I have different behavior in Visual Studio 2010.
No Comments »