Category: C#

Quite often when dealing with an API or some other external service, you will find that you get Unix timestamps returned to you or alternatively have to provide a timestamp in Unix form when sending a request back. Since you are going to be running your .NET code on a windows machine, you don’t have a built in way to get the time in Unix format. It is pretty simple to obtain a Unix timestamp though. Here is what you need to do to convert C# DateTime object to a Unix timestamp.

The following helper method can be used to convert a standard datetime object into a Unix timestamp value. The value is quite large and will get bigger as time goes on, so make sure to use an appropriate variable type. Long will work fine for this scenario.

C#

1

2

3

4

5

6

publicstaticlongConvertToUnixTime(DateTime datetime)

{

DateTime sTime=newDateTime(1970,1,1,0,0,0,DateTimeKind.Utc);

return(long)(datetime-sTime).TotalSeconds;

}

It’s a pretty simple method with little to explain. Its worth noting that you need to keep this as a long. Int is not going to be big enough to hold the time value.

If you want to do things in reverse. I.e. Convert a Unix timestamp back to a C# DateTime object, you can use the following helper method.

I recently hit an issue where i needed to change the name of an XML node. It ended up being a lot more complicated than I had expected it to be. node.Name is a read only field, so you can’t take the simple route and rename it this way. Since you cannot rename the node, I had to create a new node and delete the old one. Not overly complex, but it is a little messy with the limitations of the XmlDocument that require references to the old document. I also wanted to make this solution reusable. Here is the solution I came up with to rename an xml node using C# XmlDocument.

I will start with the method and explain why it seems overcomplicated for a simple task. The first parameter is the doc that oldRoot belongs to. The reason this needs to be passed is because you cant create an XmlNode without an XmlDocument and if you want to add a node to a document, it needs to be created with that document. This is why doc needs to be passed over. The for loop will take all of the elements from the old node and add them to the new node. This will mean that there are now 2 nodes that have the exact same content, but one has the new name that you wanted to rename the node to.

Once the new node has all the data of the old node, you can append this new node to the document and then remove the old one. This is all that you need to do. There is no real need for a return type here. You have passed doc as a parameter, any changes made to this doc will be made on a global level. When the method completes the change will have been made to the doc that you passed to this method.

This tutorial will show you how to programmatically create a subsite in Sharepoint. This can be done a few different ways and if you have server access you may prefer to do this on the server side, but you can just as easily create one using the Client-Side Object Model.

You can do this using a standard C# console application. For this example I used Visual Studio 2013 with .NET 4.0. You will need to include 2 assemblies in order for the code to work.

C#

1

2

usingMicrosoft.SharePoint.Client;

usingMicrosoft.SharePoint;

If this code throws an error then you will need to add the reference to your project. For me, I was not able to find Microsoft.Sharepoint but when I added the .client assembly it worked.

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

using(ClientContext ctx=newClientContext("http://site.com"))

{

WebCreationInformation wci=newWebCreationInformation();

wci.Url="mysite"// This url is relative to the url provided in the context

wci.Title="My Site";

wci.Description=description;

wci.UseSamePermissionsAsParentSite=true;

wci.WebTemplate="STS#0";

wci.Language=1033;

Webw=ctx.Site.RootWeb.Webs.Add(wci);

ctx.ExecuteQuery();

}

Thats it! The code above is all you need to create a new subsite. If you make a mistake and want to change it, you can also do this quite easy using similar code. You can modify pretty much everything on a subsite, but the URL becomes read only so you cannot change this once it has been set.

C#

1

2

3

4

5

6

7

8

9

10

11

using(varcontext=newClientContext("http://site.com/subsite")

{

//context.Credentials = credentials;

varsite=context.Web;

context.Load(site);

context.ExecuteQuery();

site.Title="New Title";

site.Description="New Description";

site.Update();

context.ExecuteQuery();

}

This is all you need to be able to add a subsite and to be able to edit it.

This can be done in the RouteConfig.cs. You can set the default route that will be used to display the home page. You can find this file in Project->App_Start->RouteConfig.cs. The config inside this file will let you set default home page for ASP.NET razor MVC websites. The contents of the default file should look something like this.

The line that you need in particular to change the default homepage of an ASP MVC site is the defaults section. Change the name of the controller to whatever you want. The action for this will be the name of the method that you want to call within that controller. Once you have added this information your server should now be displaying this page as the default home page for your site.

When you want to access a session from an ashx file you will find that using context.Session[“value”] , will not allow you to access the session variables from the previous file where the session was available from. This is expected behavior and based on some guides Ihave seen, is often over complicated. Rather than building a work around that will pass the values through the URL or some other method, it is actually quite easy to just gain access to this session value again from the ashx file by implementing a single class.

To implement another class in your current class you need to alter the class declaration. By altering the class declaration and implementing the IRequiresSessionState class, you will be able to access a session information from an ashx file, without needing to built a messy work around that requires data to be sent through a different, less convenient medium. The class you need to implement is “System.Web.SessionState.IRequiresSessionState”. The class declaration should look something like this.

This is all you need to access a session from an ashx file. You dont need to be writing anything to a particular session file or creating any fancy methods. Using this method is all you need. This will save you the trouble of building a messy work around.

When using Sql Server to insert records into a DB its a common requirement to be able to pull back the auto incremented Id that was generated for this row. Most solutions for this i have seen involve making a second query to the database in and along the lines of “SELECT @@IDENTITY”, but this method seems quite wasteful. It seems like a simple request that the database would return the value automatically without you having to ask for it with a second wasteful query. Well, it turns out that it’s incredibly simple to do the auto increment ID from SQL Server after an insert is performed.

The auto incremented value can be easily returned by using the OUTPUT Inserted.<auto id col name>. To put this in a real life example, the following query will insert a user into the Users database and will return the auto ID. In this case there is a column called “id” and this is what i am asking the DB to return in the query.

1

INSERT INTO Users(name,age)OUTPUT Inserted.id VALUES('Tom','50');

Using this query from whatever language you use will make the DB return the auto incremented ID from an SQL Server database. Here is an example of how you would use the above query in C# to get the auto incremented ID back from the database.

I found it quite odd to discover that there was no built in method to count the total amount of lines for a project in Visual Studio 2013. I did some searching and found that pretty much every guide was saying download this application or install this plugin in order to get the code metrics. This is a big waste when all you want to see is what the total lines of code in your solution is. Thankfully there is a really simple solution to find out how many lines of code there are in your project. Here is how to get the total line count in visual studio 2013.

Open up your project solution and press CTRL + SHIFT + F. This will open the typical find and replace / search window. Go down to the “Find Options” field and open the drop down. Go down and select the “Use Regular Expressions” box. This will allow you to perform a search using regex. In the “Find what:” box, enter the following value.

1

^(?([^\r\n])\s)*[^\s+?/]+[^\n]*$

Click the “Find All” button and Visual Studio will begin counting all of the lines of code. The more lines the longer this will take, but once it has been completed the results will be displayed in the console window. Scroll down to the very bottom to see the results. The final line should look something like this.

Changing the color of the text in a C# console app can be done very easily using a built in command. The wording to this can get a little confusing and will likely be what throws you off at first, but here is how the change text color on a C# console app very easily.

Create a console app and use the standard Console.Write(“”); to output some text. This will output white text on a black background. If you would like to output some colored text then you can use the Console.ForegroundColor property. I feel this wording is a little confusing, but ForegroundColor is what we use to alter the color of the text in a command shell window.

The following command will output red and blue text similar to what you can see in the main image for this post.

C#

1

2

3

4

5

6

7

8

Console.ForegroundColor=ConsoleColor.Red;

Console.Write("RED = ");

Console.ForegroundColor=ConsoleColor.White;

Console.Write(redScore+"\n");

Console.ForegroundColor=ConsoleColor.Blue;

Console.Write("BLUE = ");

Console.ForegroundColor=ConsoleColor.White;

Console.Write(blueScore+"\n");

Similar code can also be used to change the background color of the console window using Console.BackgroundColor. It is worth exploring all of the other things that can be done using the Console object in C#. If you are using Visual Studio you can use the IntelliSense to see what options you can use. Alternatively you could also read it up in the official documentation for the Console object.