将数据时间值从ASP.NET gridview插入SQL Server Datatable

时间:2013-03-20 08:43:10

标签: .net datetime gridview sql-date-functions sql-types

我在ASP.NET gridview中有一个列,在页面加载时以此格式显示日期值(dd / mm / yyyy 00:00:00)。这绑定到一个SQL表,其列声明为“Date”类型。

在页脚模板中,gridview的各列中有一个“插入”按钮和文本框。单击该按钮后,应将新记录插入SQL Server Datatable。

但是,有一个调试错误,错误说: 用户代码未对SQLException进行处理。 从字符串

转换日期和/或时间时转换失败

以下是此方法的代码:

protected void insertRowToDOitems(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Add")
        {
            string strDO_no = ((TextBox)GridView1.FooterRow.FindControl("txtdo_no")).Text;
            string strDO_item_no = ((TextBox)GridView1.FooterRow.FindControl("txtdo_item_no")).Text;
            string strMaterial = ((TextBox)GridView1.FooterRow.FindControl("txtmaterial")).Text;
            string strDeliveryQty = ((TextBox)GridView1.FooterRow.FindControl("txtdelivery_qty")).Text;
            string strSO_no = ((TextBox)GridView1.FooterRow.FindControl("txtso_no")).Text;
            string strSOItem_no = ((TextBox)GridView1.FooterRow.FindControl("txtso_item_no")).Text;
            string strUOM = ((TextBox)GridView1.FooterRow.FindControl("txtuom")).Text;
            string strDeliveryDate = ((TextBox)GridView1.FooterRow.FindControl("txtDelivery_date")).Text;

            //SQLDataSource parameters
            DOitem.InsertParameters.Clear();
            DOitem.InsertParameters.Add("do_no", strDO_no);
            DOitem.InsertParameters.Add("do_item_no", strDO_item_no);
            DOitem.InsertParameters.Add("material", strMaterial);
            DOitem.InsertParameters.Add("delivery_qty", strDeliveryQty);
            DOitem.InsertParameters.Add("so_no", strSO_no);
            DOitem.InsertParameters.Add("so_item_no", strSOItem_no);
            DOitem.InsertParameters.Add("uom", strUOM);
            DOitem.InsertParameters.Add("delivery_date", strDeliveryDate);

            DOitem.Insert();
        }
    }

这个方法是从GridView标记中调用的:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                    DataKeyNames="do_no,do_item_no" DataSourceID="DOitem" CellPadding="4" 
                    GridLines="None" 
                    AllowSorting="True" ShowFooter="True" style="margin-top: 1px" 
                    ForeColor="#333333" Height="58px" Width="546px" OnRowCommand="insertRowToDOitems">

如果错误是由日期格式或类型的差异引起的,那么如何解决?

另外,如何在gridview中显示从SQL表中检索的日期(“dd / MM / yyyy”)?我尝试了以下但是它不起作用:

<EditItemTemplate>
                            <asp:TextBox ID="txtDelivery_date" runat="server"
                                         Text='<%#Bind("delivery_date", "{0:dd/MM/yyyy}") %>'>
                            </asp:TextBox>
                        </EditItemTemplate>

1 个答案:

答案 0 :(得分:0)

是的,这可能是一个日期格式问题,例如,如果您在前端使用英国时间格式并且SQL服务器可能使用美国日期格式,则会出现插入错误。我总是坚持使用ISO通用格式的日期字符串来避免这些问题,所以我会更改这一行:

DOitem.InsertParameters.Add("delivery_date", strDeliveryDate);

到这个

DOitem.InsertParameters.Add("delivery_date", DateTime.Parse(strDeliveryDate).ToString("s"));

“s”将时间转换为如下格式:2013-03-12T21:15:07

很抱歉,我不理解EditTemplate中的问题,该代码对我来说没问题。