ASP.NET 中使用更新命令的日期格式问题
Date fomat issue using UpdateCommand in ASP.NET
我正在使用 ASP.NET (C#),MySQL。
我正在尝试使用由 SQLDataSource 提供的 FormView 组件...目标是创建一个表单来处理来自单个 table 的数据,而无需过多编码并尽可能多地依赖框架尽我所能。
我找到了如何显示数据和编辑它们,但是当我来到 'date' 字段时,我发现我的任务提前停止了。
因为我是意大利人,所以我使用标准 'italian' 日期格式 (dd/MM/yyyy),这与 MySQL 内部日期格式 (yyyy-MM-dd) 完全不同,这会导致日期格式错误我尝试更新字段。
包含'date'字段的表单是这样定义的:
<asp:FormView
ID="_frmData"
runat="server"
DataKeyNames="id"
DataSourceID="_sdsContatto"
DefaultMode="Edit">
<EditItemTemplate>
<asp:Table runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:TextBox
ID="_txtDate"
runat="server"
Text='<%#Bind("date_field","{0:dd/MM/yyyy}")%>' />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</EditItemTemplate>
</asp:FormView>
SQLDataSource 是这样定义的:
<asp:SqlDataSource ID="_sdsData
runat="server"
ConnectionString="<%$ ConnectionStrings:data_db %>"
ProviderName="<%$ ConnectionStrings:data_db.ProviderName %>"
SelectCommand=" SELECT
date_field
FROM
table
WHERE
id=@id;"
UpdateCommand=" UPDATE
table
SET
date_field = @date_value
WHERE
id=@id;">
</asp:SqlDataSource>
使用 'italian' 日期格式导致此错误:
Incorrect date value: '9/12/1971' for column 'date_field' at row 1
有解决此类问题的方法吗?
我试过 MySQL STR_TO_DATE() 但运气不好。
最好的问候任何帮助或建议。
迈克
解决方案从数据提交转变成 'separate' 可视化。简而言之,解决此类问题的最佳方法是:
<asp:FormView
ID="_fvData"
runat="server"
DataKeyNames="id"
DataSourceID="_sdsTable1"
DefaultMode="Insert" Width="100%">
<InsertItemTemplate>
<asp:TextBox
ID="_txtDate"
runat="server"
Text='<%#Eval("date_field","{0:dd/MM/yyyy}")%>' />
</InsertItemTemplate>
</asp:FormView>
在 sqldatasource(在 InsertParameters
或 UpdateParameters
部分)中,我们需要通过 ControlParameter
条目引用字段,这样:
<asp:SqlDataSource
ID="_sdsTable1"
runat="server"
InsertCommandType="StoredProcedure"
InsertCommand="create_table1">
<InsertParameters>
<asp:ControlParameter
Name="date_field"
ConvertEmptyStringToNull="true"
Type="DateTime"
ControlID="_fvData$_txtDate"
PropertyName="Text" />
</InsertParameters>
</asp:SqlDataSource>
我正在使用 ASP.NET (C#),MySQL。
我正在尝试使用由 SQLDataSource 提供的 FormView 组件...目标是创建一个表单来处理来自单个 table 的数据,而无需过多编码并尽可能多地依赖框架尽我所能。
我找到了如何显示数据和编辑它们,但是当我来到 'date' 字段时,我发现我的任务提前停止了。 因为我是意大利人,所以我使用标准 'italian' 日期格式 (dd/MM/yyyy),这与 MySQL 内部日期格式 (yyyy-MM-dd) 完全不同,这会导致日期格式错误我尝试更新字段。
包含'date'字段的表单是这样定义的:
<asp:FormView
ID="_frmData"
runat="server"
DataKeyNames="id"
DataSourceID="_sdsContatto"
DefaultMode="Edit">
<EditItemTemplate>
<asp:Table runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:TextBox
ID="_txtDate"
runat="server"
Text='<%#Bind("date_field","{0:dd/MM/yyyy}")%>' />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</EditItemTemplate>
</asp:FormView>
SQLDataSource 是这样定义的:
<asp:SqlDataSource ID="_sdsData
runat="server"
ConnectionString="<%$ ConnectionStrings:data_db %>"
ProviderName="<%$ ConnectionStrings:data_db.ProviderName %>"
SelectCommand=" SELECT
date_field
FROM
table
WHERE
id=@id;"
UpdateCommand=" UPDATE
table
SET
date_field = @date_value
WHERE
id=@id;">
</asp:SqlDataSource>
使用 'italian' 日期格式导致此错误:
Incorrect date value: '9/12/1971' for column 'date_field' at row 1
有解决此类问题的方法吗?
我试过 MySQL STR_TO_DATE() 但运气不好。
最好的问候任何帮助或建议。
迈克
解决方案从数据提交转变成 'separate' 可视化。简而言之,解决此类问题的最佳方法是:
<asp:FormView
ID="_fvData"
runat="server"
DataKeyNames="id"
DataSourceID="_sdsTable1"
DefaultMode="Insert" Width="100%">
<InsertItemTemplate>
<asp:TextBox
ID="_txtDate"
runat="server"
Text='<%#Eval("date_field","{0:dd/MM/yyyy}")%>' />
</InsertItemTemplate>
</asp:FormView>
在 sqldatasource(在 InsertParameters
或 UpdateParameters
部分)中,我们需要通过 ControlParameter
条目引用字段,这样:
<asp:SqlDataSource
ID="_sdsTable1"
runat="server"
InsertCommandType="StoredProcedure"
InsertCommand="create_table1">
<InsertParameters>
<asp:ControlParameter
Name="date_field"
ConvertEmptyStringToNull="true"
Type="DateTime"
ControlID="_fvData$_txtDate"
PropertyName="Text" />
</InsertParameters>
</asp:SqlDataSource>