Question

I am creating a simple input form to create an account. On the form there is an input field for the year the company was founded, this is a simple textbox where the user will type in the year i.e. 2005.

However on attempting to insert this to the database field which is a datetime an error is being thrown despite converting the textbox entry to datetime...

myCompanyAccount.Founded = Convert.ToDateTime(this.TxtCompanyFounded.Text);

Is there a way in which i can can convert a year input i.e. 2005 to a datetime so it can be inserted to the database...? Thanks in advance!

Was it helpful?

Solution 2

You should create a new DateTime and just enter default days / months if you don't need them, for example:

MyCompany.Founded = new DateTime(Convert.ToInt32(this.TxtCompanyFounded.Text), 1, 1);

OTHER TIPS

It happens just because 2005 is not a standart date and time format and that's the reason Convert.ToDateTime will fail.

You can use DateTime.TryParseExact or DateTime.ParseExact methods instead to parse your custom date and time like;

string s = "2005";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
     Console.WriteLine(dt);
}

dt will be 01/01/2005 00:00:00 (of course it's representation depends on your current culture in .ToString() method)

Here a demonstration.

use

myCompanyAccount.Founded = new DateTime(int.parse(TxtCompanyFounded.Text), 1, 1)

this will insert a date of 1 january + year

You cannot convert a string or int to datetime..So you have to format it like a date..Try this..

 int year=convert.toint32(TxtCompanyFounded.Text);
 DateTime Date= new DateTime(year, 1, 1);

If the user can only enter a year, consider simply:

var date = Convert.ToDateTime(str + "-01-01");

It's not the "cleanest" but it will do the trick (FSVO) - however, maybe the database column should just be a YEAR and not a DATETIME?

Do something like this in insert query,

Insert into table (starteddate) values (Convert.ToDateTime('"+TextBox1.Text+"'))

You can use DateTime.TryParseExact, providing a list of all the formats you want to accept.

E.g.:

string[] validFormats = new[] {
    "yyyy",
    "MM/yyyy",
    "MM/dd/yyyy"
};
DateTime result;
var success = DateTime.TryParseExact("2005", validFormats, 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result);

You use:

myCompanyAccount.Founded =
    DateTime.ParseExact(this.TxtCompanyFounded.Text, "yyyy", null);

or more securely:

DateTime result;
bool canParse = DateTime.TryParseExact(this.TxtCompanyFounded.Text,
    "yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
if (canParse)
{
    myCompanyAccount.Founded = result;
}
else
{
    // take care of problematic input
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top