2014-05-05 85 views
1

我正在創建一個簡單的輸入表單來創建帳戶。在窗體上有該年度的公司成立一個輸入字段,這是一個簡單的文本框,當用戶將在今年即2005年將年份字符串即'2005'轉換爲日期時間值

但是在試圖插入這是一個日期時間數據庫字段中鍵入一個錯誤被拋出,儘管文本錄入轉換爲datetime ...

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

有沒有辦法。我在可以將一年的輸入,即2005年爲datetime,因此它可以被插入到數據庫中.. 。?提前致謝!

+0

你的邏輯似乎有點這裏有缺陷。 DateTime不只是一年。如果你想存儲創建日期,然後要求日期和時間值(從一些官方文檔),否則日和月將是任意的,而如果創建年份足夠,然後將其存儲在一個簡單的整數柱 – Steve

回答

3

您應該創建一個新的DateTime和剛進入默認天/月,如果你不需要它們,例如:

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

恰巧因爲2005不是標準的日期和時間格式,這就是Convert.ToDateTime將失敗的原因。

您可以使用DateTime.TryParseExactDateTime.ParseExact方法來解析您的自定義日期和時間;

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

dt01/01/2005 00:00:00(當然這是表示取決於您當前的文化.ToString()法)

這裏一個demonstration

2

使用

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

這將插入1月1日一年以上的日期

1

您不能轉換爲字符串或int datetime..So你有一個像date..Try這格式化..

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

不要在插入查詢這樣的事情,

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

如果用戶能夠輸入年份,可以考慮簡單地說:

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

這不是「最乾淨」,但它會做的伎倆(FSVO) - 但是,也許是數據庫列應該只是一個而不是DATETIME?

0

您可以使用DateTime.TryParseExact,提供所有你想要的格式列表接受。

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); 
0

您使用:

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 
} 
相關問題