0

SQL データベース (1 列) から情報を取得する 3 つのドロップダウンがあります。ユーザーが最初のドロップダウンから WorkShopName を選択すると、2 番目のドロップダウンに利用可能な日付が表示され、日付を選択すると、ユーザーは 3 番目のドロップダウンから場所を選択できます。選択した情報をドロップダウンから SQL データベースの別の列に挿入しようとしています。ボタン登録をクリックすると、「文字列から日付および/または時刻を変換するときに変換に失敗しました」と表示されます。日付ドロップダウンの選択値の代わりに DateTime.Now を挿入しようとしましたが、エラーは同じです。誰でも助けることができますか?ありがとう

ドロップダウンは次のとおりです。

<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();
4

2 に答える 2

3

私はこれが与えられた正確な順序でなければならないと確信しています。

違う:

("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 に変換しようとしています。

于 2013-04-16T21:03:48.053 に答える
0

これを試して:

CmdSql2.Parameters.Add("@WorkshopDate", SqlDbType.VarChar).Value = workshopDate.Text;
于 2013-04-16T21:01:39.510 に答える