【问题标题】:Date fomat issue using UpdateCommand in ASP.NET在 ASP.NET 中使用更新命令的日期格式问题
【发布时间】:2015-07-22 12:10:06
【问题描述】:

我正在使用 ASP.NET (C#)、MySQL。

我正在尝试通过 SQLDataSource 使用 FormView 组件提要...目标是创建一个表单来处理来自单个表的数据,而无需过多编码并尽可能多地依赖框架。

我发现了如何显示和编辑数据,但是当我来到“日期”字段时,我发现我的任务提前停止了。 因为我是意大利人,所以我使用与 MySQL 内部日期格式 (yyyy-MM-dd) 完全不同的标准“意大利”日期格式 (dd/MM/yyyy),这会在我尝试更新字段时导致日期格式错误。

包含“日期”字段的表单是这样定义的:

<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>

使用“意大利”日期格式会导致此错误:

不正确的日期值:第 1 行的“date_field”列的“9/12/1971”

有办法解决这类问题吗?

我尝试使用 MySQL STR_TO_DATE() 没有运气。

最好的问候任何帮助或建议。

迈克

【问题讨论】:

  • 我可能会尝试将 FormView 绑定值保留为预期格式,以保持应用程序和数据库之间的功能。要处理本地格式问题,请使用 FormView 的数据绑定事件处理程序后面的代码根据您的要求重新格式化。
  • 您好,您的意思是为 OnDataBound 事件定义一个处理程序,以使用“本地”格式填充文本框,然后在更新时使用 OnUpdateCommand 处理程序将文本框的内容设置为正确的格式?我想使用 UpdateParameters !?
  • 正确。因此,您的日期列的值与数据库格式绑定,以保持更新和插入工作。然后,您将重写 FormView 的数据绑定处理程序中的格式,以您本地所需的格式显示它。
  • 你能举个例子吗?我正在尝试找出解决方案,但对我来说仍然不清楚。

标签: c# mysql asp.net date format


【解决方案1】:

该解决方案将数据提交与“分开”的可视化相结合。简而言之,解决此类问题的最佳方法是:

<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(InsertParametersUpdateParameters 部分)中,我们需要通过 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 2017-04-21
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多