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);
Frage
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!
Lösung 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);
Andere Tipps
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
}