Monday, April 23, 2018

Spirit Island Companion App

Greetings and Salutations!

I've recently finished a "Beta" / prototype of my Spirit Island companion app. It is not the full game - you must still own a full copy of the physical game to make use of the app. It is pretty much just a digitized invader board. It handles building the fear deck, event deck, invader deck, blight card, etc. and allows you to gain fear, add and remove blight, draw cards, advance invader cards, etc. It does pretty much everything you do on the invader board only without needing to take up the table space and take out all the cardboard bits and all that. Makes set up and take down faster and easier, and is rather convenient IMHO. It still has some limitations, (and possibly a few minor bugs), but I just tossed it together in my spare time for fun. It works great on my MS Surface.

You can find the base board game on Amazon - it's called Spirit Island (duh), as well as the Expansion - Branch & Claw. The Board Game Geek listing is here.

It should be noted that I am fully adhering to the terms creating for "fan creation of game elements", as I understand them, and hereby post the following as proof/acceptance:
@Eric: I agree to the terms for creating Spirit Island game elements set forth in the FAQ.
If I am somehow not following the rules, or have misunderstood them, please contact me and I will fix the issue or remove the download link to this program as soon as possible.


The Spirit Island Companion App is totally free and can be acquired here:
This is the download link for the Spirit Island Companion App.


If you find this program enjoyable, useful, and/or helpful, and you would like to support further development of this app or others like it, aka: bug fixes, updates when new expansions come out, added features based on user-submitted suggestions, and possibly apps for other games, you can find a donation link near the bottom of the left hand column of my blog under my "profile".


ASP.NET Week 4 - Stored Procedures w/ OleDb

Welcome back Sportsball Fans! Today we’re going to review the basics of using a stored procedure in a database using and OleDb command / connection object. This is pretty much the same as using an SQLCommand, all the syntax is (seems to be) the same, so this information should work whether you are using Ole, or the regular kind of connection. Here is a brief overview of what you're going to learn:

Our outline

1. Creating the necessary command and connection objects & Setting them up.
2. Configuring those objects to use a stored procedure.
3. Setting up variables for passing arguments to a stored procedure.
4. Putting it all in a try catch block for safety.

Here we go!


Section 1:

You create the objects, and initialize them to connect to the database, in pretty much the exact same way you would for any other C# database access in code.

1
2
3
4
5
6
7
8
OleDbConnection conn = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
string strOledbConnection = @"Provider=SQLOLEDB;
                            Data Source=.;
                            Integrated Security=SSPI;
                            Initial Catalog=yourDbNameHere";
conn.ConnectionString = strOledbConnection;
conn.Open();



Section 2:

Configuring the object(s) is actually also very easy and fast. First, we need to set the connection and commandText of the cmd object. The first is trivial, as we have all done many times before, however setting the command text might be new-ish to some, so just remember that when setting the commandText to use only the name of the stored procedure – no arguments or parameters, and it is case sensitive (of course). After you’ve set these, all you have to do is set the CommandType to “CommandType.StoredProcedure” and you’re ready to move on to the next (slightly more complicated) step.

1
2
3
cmd.Connection = conn;
cmd.CommandText = "nameOfStoredProcedure";
cmd.CommandType = CommandType.StoredProcedure;



Section 3:

In order to pass arguments to our stored Procedure, we first need to set up a few temporary variables, these should be of the ‘OleBdParameter’ type and will have data stored in them the ‘cmd.Parameters.Add()’ method. You will need one variable per parameter. In this example we have four.

1
2
3
4
OleDbParameter strName = cmd.Parameters.Add("@Name", OleDbType.VarChar, 50);
OleDbParameter strEmail = cmd.Parameters.Add("@Email", OleDbType.VarChar, 50);
OleDbParameter strHandle = cmd.Parameters.Add("@Handle", OleDbType.VarChar, 50);
OleDbParameter strReason = cmd.Parameters.Add("@Reason", OleDbType.VarChar, 50);

Each Parameter has 3 … well, … parameters. The 1st is a handle for when you want to pass them in as a combined string format when creating “standard” SQL commands, as in: “Insert into [Logins] ([Name],[EmailAddress],[LoginName],[ReasonForAccess]) Values (@Name, @EmailAddress, @LoginName, @ReasonForAccess );”. The 2nd and 3rd parameters should match the variable type in the db in type and size. After setting them up, you will want to set each one’s ‘direction’ to ‘input’ as shown.

1
2
3
4
strName.Direction = ParameterDirection.Input;
strEmail.Direction = ParameterDirection.Input;
strHandle.Direction = ParameterDirection.Input;
strReason.Direction = ParameterDirection.Input;

After successfully setting up your Stored Procedure input variables as above, you are now ready to assign data to them in a very simple C# fashion, and can then run your (non)Query as usual:

1
2
3
4
5
6
strName.Value = tbName.Text;
strEmail.Value = tbEmail.Text;
strHandle.Value = tbHandle.Text;
strReason.Value = tbReasons.Text;
 
cmd.ExecuteNonQuery();



Section 4:

All this should really be done in a try catch block for safety. I don’t think I should really need to explain why this is the case, but I will show you a complete code block here below so that you can see out “final product”.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection();
        OleDbCommand cmd = new OleDbCommand();
        try
        {   //1. Make a Connection
            string strOledbConnection = @"Provider=SQLOLEDB;
                                    Data Source=.;
                                    Integrated Security=SSPI;
                                    Initial Catalog=ASPNetHomework";
            conn.ConnectionString = strOledbConnection;
            conn.Open();

            //2. Issue a Command
            cmd.Connection = conn;
            cmd.CommandText = "pInsLogins";
            cmd.CommandType = CommandType.StoredProcedure;

            OleDbParameter strName = cmd.Parameters.Add("@Name", OleDbType.VarChar, 50);
            OleDbParameter strEmail = cmd.Parameters.Add("@Email", OleDbType.VarChar, 50);
            OleDbParameter strHandle = cmd.Parameters.Add("@Handle", OleDbType.VarChar, 50);
            OleDbParameter strReason = cmd.Parameters.Add("@Reason", OleDbType.VarChar, 50);
            strName.Direction = ParameterDirection.Input;
            strEmail.Direction = ParameterDirection.Input;
            strHandle.Direction = ParameterDirection.Input;
            strReason.Direction = ParameterDirection.Input;

            strName.Value = tbName.Text;
            strEmail.Value = tbEmail.Text;
            strHandle.Value = tbHandle.Text;
            strReason.Value = tbReasons.Text;

            cmd.ExecuteNonQuery();

            //3. Process the Results
            Label1.Text += "Request Submitted Successfully.";
        }
        catch (Exception ex)
        {
            Label1.Text += "<b>" + cmd.CommandText.ToString() + "</b><br /><br />";
            Label1.Text += ex.ToString();
        }
        finally { conn.Close(); } //4. Run clean up code
    }


Best of luck to you in your coding.
See you next time!

Tuesday, April 17, 2018

Creating an ASP webpage using a Master and Content model with html, css, & C#

Greetings!

Have you ever wondered how to create a webpage using a Master and Content model with html, css, & C#? How about how to make your own personal stash of ibuprofen in the comfort of your living room? Ever thought how cool it would be if you could use lasers and tinfoil to increase your wi-fi's output by 350%? Well, if you want to learn the 1st one, I've got you covered. Not so much on the other two.

So, what we're gonna do today is learn the basics of creating a webpage by using a model that includes a "MasterPage" and "Content Pages". This is different from making a 'regular' html/css webpage because the pages themselves don't all include all the usual markup that you may be used to seeing. At least, not all in the same place. Here is a brief overview of what you're going to learn:

Our outline

One. Starting a new Master/Content project.
Too. How the master page looks (and how it works with content pages).
3. How the content pages look (and how they work with the master page).
Fore!. How the css and code-behind pages work with this type of project.
VI. Bonus: Proof that aliens exist.


Section One:
The standard way to create this type of project is actually quite straightforward, as is most of the process of this entire process/method. The first thing you'll want to do is of course open up your favorite IDE, mine being Visual Studio 2017. Choose to make a new project and select the "ASP.NET Empty Web Site"; The exact wording of the project might differ based on what IDE you are using and its version. After your project is opened, right click on the project name (Website1(1) by default), and click Add | Master Page. You will now see... a master page. With some html code and stuff.
A super exciting screen shot of visual studio!


Section Too:
So, what is this master page? Well, if you look closely you will see that it looks pretty much the same as a basic regular html webpage that you might create in a really simple text editor for a very simple website. There are, however, two things that might stick out to your trained and expert eagle eyes: the code that reads something like this "asp:contentplaceholder id="ContentPlaceHolder1" runat="server" "/asp:contentplaceholder". This is half of the linking between master and content pages. "But, why?" you might ask.

What you want to do here is write the basic framework for a web site wherein all the pages will look the same, or at least have a "theme" that they all share. If all the pages will use the same (exact) look/theme, then you can replace the 1st occurrence of the asp:ContentPlaceHolder (the one in the "head" tag section) with your standard css ref link as I have done in the following example. For each other occurrence of the asp:ContentPlaceHolder, you will be able to add whatever you would normally - but we'll worry about that later.

For now, just fill in all the "boiler plate" that you need for your page without any of the actual content - that is, no 's, no div tables, no text - just the basic html code you need to make the page layout how you want it. Also, feel free to add more asp:ContentPlaceHolder tags as necessary, if you copy and paste the one in the main body, it will automatically change/fix the syntax and naming for you to make them usable without errors.
An incredibly creative website template, if I do say so myself.


Section 3:
Now that you have a Master page all laid out with framework code for your website, now we will start making content. My content here is rather sparse (don't tell, but all of this is really just for homework credit), but you can obviously get pretty complex here. For example, all my pages have the same h1 heading in the header section/tag of the page, but you could just as easily have a different 'title' there for each page, or even a different Title (from the head section/tag) by using another asp:ContentPlaceHolder there. Anyway, now that all that is done, go over to the solution explorer again and right click on your "MasterPage.master" file - and then click "Add Content Page".

Once done processing, which generally should be very fast, you will see that VS has created a new file for you named "Default.aspx". If you open this file you will notice that for each of your asp:ContentPlaceHolder tags that you set up in your master page, you will now have a "asp:Content" tag with a ContentPlaceHolderID property set to its corresponding ContentPlaceHolder. Each of these will, once the page is rendered from the server, be inserted into its appropriate place in the master page, and then made into a more-or-less standard webpage on the clients machine. Note that these content pages do not need any html tags or framework, they are content only, using only the html content tags necessary for your css to work, such as "p", "h1", etc.
Maybe I should start posting extra random pictures just to make this more interesting...


Section Fore!:
If you right click  on the project name and click Add | Style Sheet, you can add a standard css style sheet to the project/web site and use it as you normally would. Just make sure you add the link ref to the head of each content page that should use it, or to the master page if every page will be using the same styles. Furthermore, if you expand the arrow next to any given page (Master or Content) you will find a .cs file associated with each one. This is the code behind file for that given page, and can be used as you would normally use a code behind page for any given web page.
Look Mom! Codebehind!


Section VI:
Aliens!
"It's an older meme sir, but it checks out."
~The End~


I hope you have enjoyed reading my incredibly helpful, insightful and exciting blog post about making a basic html/css website using the Master/Content model. If you have any questions or comments, please feel free to do the thing with the stuff down below. By the way, here is how you make ibuprofen.