5

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!

Paul Kirkason
  • 227
  • 2
  • 4
  • 20
  • Your logic seems a bit flawed here. A DateTime is not just an year. If you want to store the founded date, then asks for a full date time value with day and month (from some official docs) otherwise the day and month will be arbitrary, instead if the founding year is enough then store it in a simple integer column – Steve May 05 '14 at 10:48

8 Answers8

8

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.

Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
6

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);
Alex
  • 1,549
  • 2
  • 16
  • 41
2

use

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

this will insert a date of 1 january + year

user3401335
  • 2,335
  • 2
  • 19
  • 32
1

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);
Jameem
  • 1,840
  • 3
  • 15
  • 26
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?

user2864740
  • 60,010
  • 15
  • 145
  • 220
0

Do something like this in insert query,

Insert into table (starteddate) values (Convert.ToDateTime('"+TextBox1.Text+"'))
gkrishy
  • 756
  • 1
  • 8
  • 33
0

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);
Joe
  • 122,218
  • 32
  • 205
  • 338
0

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
}
Jeppe Stig Nielsen
  • 60,409
  • 11
  • 110
  • 181