Saturday, November 15, 2008

Nullable Types (C# :: Visual Studio 2008)

Nullable Types (C# :: Visual Studio 2008) 


Nullable types are instances of the System.Nullable<T> struct. A nullable type can represent the correct range of values for its underlying value type, plus an additional null value. For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. A Nullable<bool> can be assigned the values true false, or null. The ability to assign null to numeric and Boolean types is especially useful when you are dealing with databases and other data types that contain elements that may not be assigned a value. For example, a Boolean field in a database can store the values true or false, or it may be undefined.

class NullableExample
{
static void Main()
{
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}

// y is set to zero
int y = num.GetValueOrDefault();


// num.Value throws an InvalidOperationException if num.HasValue is false try
{
y = num.Value;
}
catch (System.InvalidOperationException e)
{
System.Console.WriteLine(e.Message);
}
       }
   }

The example will display the output:

num = Null
Nullable object must have a value.

Nullable Types Overview

Nullable types have the following characteristics:

  • Nullable types represent value-type variables that can be assigned the value of null. You cannot create a nullable type based on a reference type. (Reference types already support the null value.)
  • The syntax T? is shorthand for Nullable<T>, where T is a value type. The two forms are interchangeable.
  • Assign a value to a nullable type just as you would for an ordinary value type, for example int? x = 10; or  double? d = 4.108. However, a nullable type can also be assigned the value null:  int? x = null.
  • Use the Nullable<T>.GetValueOrDefault method to return either the assigned value, or the default value for the underlying type if the value is null, for example  int j = x.GetValueOrDefault();
  • Use the HasValue and Value read-only properties to test for null and retrieve the value, for example if (x.HasValue) j = x.Value;
    • The HasValue property returns true if the variable contains a value, or false if it is null.
    • The Value property returns a value if one is assigned. Otherwise, a System.InvalidOperationException is thrown.
    • The default value for HasValue is false. The Value property has no default value.
       
    • You can also use the == and != operators with a nullable type, for example, if (x != null) y
      = x;

  • Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? ­1;
  • Nested nullable types are not allowed. The following line will not compile: Nullable<Nullable<int>> n;

Friday, November 14, 2008

Using ASP.NET to Send Emails with Images by Gmail

Using ASP.NET to Send Emails with Images by Gmail [Level::Basic]

How programatically send emails with images as attachements using Gmail account is the subject of this post.
Create a new ASP.NET project and add the following SYSTEM.NET tag in its web.config file:

<system.net>
<mailsettings>
<smtp>
<network port="587" host="smtp.gmail.com">
</smtp>
</mailsettings>
</system.net>


In the Default.aspx page add three text boxes for "From", "To" and "Subject", add a text area for "Body" of emails, add a FileUpload control for attaching images to the emails and place a button tiltled as "Send Email" for sending emails.

Now, navigate to the code view of the Default.aspx page and in the Click event of the "Send Email" button, write the following code:



////////////////////////////////////////////////////
////////////////////////////////////////////////////
////////////////////////////////////////////////////
/////''''''''''''''''''''''''''''''''''''''''''/////
/////''''''''''''''''''''''''''''''''''''''''''/////
///// Description: Source code to send emails with
///// images as attachments using Gmail account.
///// Author: G. R. Roosta

///// License: Free To Use (No Restriction)
/////''''''''''''''''''''''''''''''''''''''''''/////
/////''''''''''''''''''''''''''''''''''''''''''/////
////////////////////////////////////////////////////
////////////////////////////////////////////////////
////////////////////////////////////////////////////


protected void btnSendEmail_Click(object sender, EventArgs e)
{
if (fileUpload.HasFile)
{

// Create and Set a MailMessage Object.
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
mailMessage.From = new System.Net.Mail.MailAddress(txtFrom.Text.Trim());
mailMessage.To.Add(txtTo.Text.Trim());
mailMessage.Subject = txtSubject.Text.Trim();

// Create Two Views, One Plain Text and One HTML.System.Net.Mail.AlternateView plainTextView =
System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim(), null, "text/plain");
System.Net.Mail.AlternateView htmlView =
System.Net.Mail.AlternateView.CreateAlternateViewFromString(txtBody.Text.Trim() + "<image src=cid:HDIImage>", null, "text/html");

// Add the Attached Image to the HTML version.System.Net.Mail.LinkedResource imageResource =
new System.Net.Mail.LinkedResource(fileUpload.PostedFile.FileName);
imageResource.ContentId = "HDIImage";
htmlView.LinkedResources.Add(imageResource);

// Add the Two Views to the Message.mailMessage.AlternateViews.Add(plainTextView);
mailMessage.AlternateViews.Add(htmlView);

// Set Your Network Credential.System.Net.NetworkCredential networkCredential =
new System.Net.NetworkCredential("PutYourEmailAddress@gmail.com", "PutYourPassword");

// Send Message.
System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
smtpClient.UseDefaultCredentials = false;
smtpClient.EnableSsl = true;
smtpClient.Credentials = networkCredential;
smtpClient.Port = 587;
smtpClient.Send(mailMessage);

try
{
smtpClient.Send(mailMessage);
}
catch (Exception ex)
{
string message = ex.Message;
string innerExceptionMessage = ex.InnerException.Message;
// ...}
}
}


Run the project and start sending emails!