【问题标题】:Conversion failed when converting date and/or time from character string using drop down selected value使用下拉选择值从字符串转换日期和/或时间时转换失败
【发布时间】:2013-04-17 05:03:48
【问题描述】:

我有三个从 sql 数据库(一列)中检索信息的下拉菜单。 When a user select WorkShopName from the first drop down, the second drop down shows available dates for it, and when the date is selected the user can choose the location from the third drop down.我正在尝试将下拉列表中的选定信息插入到 sql 数据库中的另一列。当我单击按钮注册时,我有“从字符串转换日期和/或时间时转换失败”。我尝试插入 DateTime.Now 而不是 Date Drop Down 的 Selected Value 但错误是相同的。有人可以帮忙吗? 谢谢

这里是下拉菜单:

<asp:Label runat="server" 
            Text="Please select work shop you would like to register for:"></asp:Label>
    </td>
    <td>
        <asp:DropDownList ID="ddlWorkShopName"  AutoPostBack="true"  runat="server" 
            DataSourceID="workshopName" DataTextField="WorkshopName" 
            DataValueField="WorkshopName">
        </asp:DropDownList>

        <asp:SqlDataSource ID="workshopName" runat="server" 
            ConnectionString="<%$ ConnectionStrings:WildLife_EducationConnectionString %>" 
            SelectCommand="SELECT DISTINCT [WorkshopName] FROM [tblWorkshop]">
        </asp:SqlDataSource>

    </td>
</tr>
<tr>
    <td>
        <asp:Label ID = "lblChoseWDate" runat="server" Text="Please chose workshop date:"></asp:Label>
    </td>
    <td>
        <asp:DropDownList ID="ddlChoseWDate" DataTextFormatString="{0:yyyy-MM-dd}" 
            AutoPostBack="True" runat="server" DataSourceID="WorkshopDate2" 
            DataTextField="WorkshopBeginingDate" DataValueField="WorkshopBeginingDate">
        </asp:DropDownList>

        <asp:SqlDataSource ID="WorkshopDate2" runat="server"
            ConnectionString="<%$ ConnectionStrings:WildLife_EducationConnectionString %>" 

            SelectCommand="SELECT DISTINCT ([WorkshopBeginingDate]) FROM [tblWorkshop] WHERE ([WorkshopName] = @WorkshopName)">
            <SelectParameters>
                <asp:ControlParameter ControlID="ddlWorkShopName" Name="WorkshopName" 
                    PropertyName="SelectedValue" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>

    </td>
</tr>
<tr>
    <td>
        <asp:Label ID="lblChoseWLoc" runat="server" Text="Please chose workshop location:"></asp:Label>
    </td>
    <td>
        <asp:DropDownList ID="ddlChoseWorkShopLoc" runat="server" 
            DataSourceID="WorkshopLocation2" DataTextField="WorkshopLocation" 
            DataValueField="WorkshopLocation">
        </asp:DropDownList>
        <asp:SqlDataSource ID="WorkshopLocation2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:WildLife_EducationConnectionString %>" 
            SelectCommand="SELECT [WorkshopLocation] FROM [tblWorkshop] WHERE (([WorkshopBeginingDate] = @WorkshopBeginingDate) AND ([WorkshopName] = @WorkshopName))">
            <SelectParameters>
                <asp:ControlParameter ControlID="ddlChoseWDate" Type="String" 
                    Name="WorkshopBeginingDate" PropertyName="SelectedValue" />
                <asp:ControlParameter ControlID="ddlWorkShopName" Name="WorkshopName" 
                    PropertyName="SelectedValue" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
    </td>
</tr>

<td>
    <asp:Button ID="btnRegister" runat="server" onclick="btnRegister_Click" 
        Text="Register" />
</td>

按钮寄存器的代码隐藏:

SqlParameter workshopDate = new SqlParameter("@WorkshopDate", SqlDbType.DateTime);
    workshopDate.Value = ddlChoseWDate.SelectedValue;

using (SqlConnection conn2 = new SqlConnection(@"Data Source=CIS489_3\WILDLIFE;Initial Catalog=WildLife_Education;Integrated Security=True;"))
{
    SqlCommand CmdSql2 = new SqlCommand
    ("INSERT INTO [tblUserWorkshop] ([UserID],[WorkshopName],[WorkshopDate],[WorkshopLocation]) VALUES (@WorkshopName, @WorkshopDate, @WorkshopLocation, @UserID)", conn2);
    conn2.Open();

    CmdSql2.Parameters.AddWithValue("@UserID", userId.ToString());
    CmdSql2.Parameters.AddWithValue("@WorkshopName", ddlWorkShopName.SelectedValue);
    CmdSql2.Parameters.AddWithValue("@WorkshopDate",workshopDate.Value);
    CmdSql2.Parameters.AddWithValue("@WorkshopLocation", ddlChoseWorkShopLoc.SelectedValue);
CmdSql2.ExecuteNonQuery();
conn2.Close();

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    我很确定这必须按照给定的确切顺序。

    错误:

    ("INSERT INTO [tblUserWorkshop] ([UserID],[WorkshopName],[WorkshopDate],[WorkshopLocation]) VALUES (@WorkshopName, @WorkshopDate, @WorkshopLocation, @UserID)", conn2);
    

    正确:

    ("INSERT INTO [tblUserWorkshop] ([UserID],[WorkshopName],[WorkshopDate],[WorkshopLocation]) VALUES (@UserID, @WorkshopName, @WorkshopDate, @WorkshopLocation )", conn2);
    

    UserID 在最后,但应该在前面。

    您几乎应该将插入和值指定为相同的顺序。您当前正在尝试将 WorkShopLocation 转换为 DateTime。

    【讨论】:

    • 非常感谢。我完全忘了检查值的顺序。
    • 是的,这是那些“掌心”的时刻之一。 :P
    【解决方案2】:

    试试这个:

    CmdSql2.Parameters.Add("@WorkshopDate", SqlDbType.VarChar).Value = workshopDate.Text;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多