![](/img/trans.png)
[英]How to retrieve column value of sql server table and store it in label.Text of c# ASP.Net
[英]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);
您還可以查看此相關主題以及與您類似的案例的一些其他信息
這里有很多問題會炸毀死星,左右和中心。
首先,你正在動態創建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.