簡體   English   中英

如何通過C#ASP.net從SQL Server中的文本框存儲日期

[英]How to store date from text box in SQL Server through C# ASP.net

我通過C#asp.net在線將日期存儲在sql server DB中時遇到了麻煩

我在ASP文件中使用了asp文本框和asp日歷擴展器來獲取用戶的日期,

 <asp:TextBox runat="server" ID="txt_date"></asp:TextBox>
<asp:CalendarExtender runat="server" ID="cal_date" TargetControlID="txt_date"></asp:CalendarExtender>

文件后面的代碼是,假設連接和命令被聲明和初始化,

mycom = new SqlCommand("insert into mytable(dtCol1) values('"+Convert.ToDateTime(txt_dob.Text).ToString("dd-MMM-yyyy") + "')", mycon);mycom.ExecuteNonQuery();

問題是,當我選擇日期少於任何月份的12時,它的工作完美,但是當日期/日期大於任何月份的12時,它會給出錯誤,

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

我已經嘗試過.ToString(“dd-MMM-yyyy”)的所有組合

請提前幫助謝謝

試試這個

mycom = new SqlCommand("insert into mytable(dtCol1) values(@value1)");
mycom.Parameters.AddWithValue("@value1",Convert.ToDateTime(txt_dob.Text));
mycom.ExecuteNonQuery();

試試這個

CultureInfo provider = CultureInfo.InvariantCulture;
System.Globalization.DateTimeStyles style = DateTimeStyles.None;
DateTime dt;
DateTime.TryParseExact(txt_dob.Text, "m-d-yyyy", provider, style, out dt);
mycom = new SqlCommand("insert into mytable(dtCol1) values(@datevalue)", mycon);
cmd.Parameters.Add("@datevalue",SqlDbType.DateTime).Value =dt;
mycom.ExecuteNonQuery();

問題似乎來自這里: Convert.ToDateTime(txt_dob.Text) 這種轉換不好,因為:

  • 它忽略了控件使用的格式 Convert.ToDateTime(...)期望字符串采用某種格式,以便正確解析它。 這無法處理txt_dob可以使用的任何自定義格式。

  • 它不了解特定文化的格式。 在內部, Convert.ToDateTime(...)可能會堅持使用CultureInfo.CurrentCulture ,據說它不能解析日期。 此外,.NET中的一些前端控件識別並使用瀏覽器傳遞的客戶端文化(對於Web應用程序),並且該文化很可能與服務器文化不同。 CultureInfo.CurrentCulture將代表服務器端文化,並且可能會出現格式差異

如果您知道txt_dob.Text的格式,則必須顯式解析它。 在下面的例子中,我假設格式為"MM/dd/yyyy"

String dateFormat = "MM/dd/yyyy";//The format that the txt_dob control uses
DateTime parsedDate = DateTime.ParseExact(
    txt_dob.Text, dateFormat, CultureInfo.InvariantCulture);

您還可以查看此相關主題以及與您類似的案例的一些其他信息

TLDR; 您使用的是錯誤的DateTime 格式

這里有很多問題會炸毀死星,左右和中心。

首先,你正在動態創建sql查詢 - 這可能是過去10年來最大的禁忌,而且每個人都停止了這樣做。 換句話說,請不要開始做(過時)ADO.NET編程將數據從網站傳遞到數據庫。 現在的替代品,如Entity Framework,NHibernate,甚至Linq2Sql,如果你是絕望的。

好的 - 也就是說,讓我們盡量回答你的問題。

原因是因為你以錯誤的格式傳遞值。 你先做日期。 您的SQL服務器可能希望它首先是MONTHS。 因為它可能被設置為樣式121 (< - 這是一個真正的技術SQL服務器設置兼容性垃圾...)

但是不要試着去爭吵和猜測。

讓我們使用更通用的起始字符串格式: yyyy-mm-dd hh:mm:ss.ms

例如。

SELECT CAST('2013-02-08 09:53:56.223' as DateTime)

你可以在SQLFIDDLE上看到這一點

這是一個非常好的StackOverflow問題 ,它解釋了默認的DateTime格式是什么,等等。

用這個:

mycom = new SqlCommand("insert into mytable (dtCol1) values ('" +  Convert.ToDateTime(txt).ToString("MMM-dd-yyyy") + "')", mycon);

謝謝

用戶DateTime.ParseExact()代替Convert.ToDateTime()方法。

dateString = "12-31-2012";
format = "MM-dd-yyyy";
try 
{
  DateTime result = DateTime.ParseExact(dateString, format, CultureInfo.CurrentCulture);
}
catch (FormatException) 
{

}

[Date_Of_Birth]='" + Convert.ToDateTime(TxtDate_Of_Birth.Text).ToString("MM-dd-yyyy") + "'

將幫助sqlserver以MM/dd/yyyy格式接受datetime但不在dd/MM/yyyy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM