我正在创建一个简单的输入表单来创建一个帐户。在表单上有一个公司成立年份的输入字段,这是一个简单的文本框,用户将在其中键入年份,即2005。
然而,当尝试将此字段插入数据库字段时,尽管将文本框条目转换为日期时间,仍会抛出错误…
myCompanyAccount.Founded = Convert.ToDateTime(this.TxtCompanyFounded.Text);
是否有一种方式,我可以转换一年的输入,即2005年到一个日期时间,所以它可以插入到数据库…?提前感谢!
发生这种情况只是因为2005
不是标准日期和时间格式,这就是Convert.ToDateTime
失败的原因。
您可以使用DateTime.TryParseExact
或DateTime.ParseExact
方法来解析您的自定义日期和时间,如;
string s = "2005";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt);
}
dt
将是01/01/2005 00:00:00
(当然它的表示取决于你在.ToString()
方法中的当前文化)
这里a demonstration
。
您应该创建一个新的DateTime
,如果您不需要它们,只需输入默认的天数/月份,例如:
MyCompany.Founded = new DateTime(Convert.ToInt32(this.TxtCompanyFounded.Text), 1, 1);
use
myCompanyAccount.Founded = new DateTime(int.parse(TxtCompanyFounded.Text), 1, 1)
这将插入日期1 January + year
不能将字符串或整型转换为datetime.所以你必须将其格式化为日期。试试这个…
int year=convert.toint32(TxtCompanyFounded.Text);
DateTime Date= new DateTime(year, 1, 1);
如果用户只能输入年份,则简单考虑:
var date = Convert.ToDateTime(str + "-01-01");
这不是"最干净的",但它会做的技巧(FSVO) -然而,也许数据库列应该只是一个YEAR而不是DATETIME?
在插入查询中执行如下操作,
Insert into table (starteddate) values (Convert.ToDateTime('"+TextBox1.Text+"'))
您可以使用DateTime.TryParseExact
,它提供了您想要接受的所有格式的列表。
例如:
string[] validFormats = new[] {
"yyyy",
"MM/yyyy",
"MM/dd/yyyy"
};
DateTime result;
var success = DateTime.TryParseExact("2005", validFormats,
CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
您使用:
myCompanyAccount.Founded =
DateTime.ParseExact(this.TxtCompanyFounded.Text, "yyyy", null);
或更安全:
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
}