0

しばらく探していますが、答えが見つかりません。次のコードは機能しますが、[削除] ボタンを押すと Oledb の未指定エラーが発生します。以下に示すコード ビハインドを使用して EmptyTemplate に新しいレコードを追加していますが、グリッドにレコードがあり、[削除] ボタンをクリックするとエラーが発生します。助けてください。

 <asp:SqlDataSource ID="AllotDataSource" runat="server" ConnectionString='<%$ ConnectionStrings:BlastConnString %>' DeleteCommand="DELETE FROM [Allotment] WHERE [AllotID] = ?" InsertCommand="INSERT INTO [Allotment] ([AllotID], [LinkConvID], [LinkHotelID], [NumRooms], [DateIn], [DateOut], [Notes]) VALUES (?, ?, ?, ?, ?, ?, ?)" ProviderName='<%$ ConnectionStrings:BlastConnString.ProviderName %>' SelectCommand="SELECT dbo.Allotment.AllotID, dbo.Allotment.LinkConvID, dbo.Allotment.LinkHotelID, dbo.Allotment.NumRooms, dbo.Allotment.DateIn, dbo.Allotment.DateOut, dbo.Allotment.Notes, dbo.Hotels.Name, dbo.Hotels.Grade FROM dbo.Allotment INNER JOIN dbo.Hotels ON dbo.Allotment.LinkHotelID = dbo.Hotels.htID WHERE (dbo.Allotment.LinkConvID = CONVERT (varchar(36), ?))" UpdateCommand="UPDATE [Allotment] SET [LinkConvID] = ?, [LinkHotelID] = ?, [NumRooms] = ?, [DateIn] = ?, [DateOut] = ?, [Notes] = ? WHERE [AllotID] = ?">
                                    <DeleteParameters>
                                        <asp:Parameter Name="AllotID" Type="Object"></asp:Parameter>
                                    </DeleteParameters>
                                    <InsertParameters>
                                        <asp:Parameter Name="AllotID" Type="Object"></asp:Parameter>
                                        <asp:Parameter Name="LinkConvID" Type="Object"></asp:Parameter>
                                        <asp:Parameter Name="LinkHotelID" Type="Int32"></asp:Parameter>
                                        <asp:Parameter Name="NumRooms" Type="Int32"></asp:Parameter>
                                        <asp:Parameter Name="DateIn" Type="DateTime"></asp:Parameter>
                                        <asp:Parameter Name="DateOut" Type="DateTime"></asp:Parameter>
                                        <asp:Parameter Name="Notes" Type="String"></asp:Parameter>
                                    </InsertParameters>
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="ConvID" PropertyName="Value" Name="LinkConvID" Type="Object"></asp:ControlParameter>
                                    </SelectParameters>
                                    <UpdateParameters>
                                        <asp:Parameter Name="LinkConvID" Type="Object"></asp:Parameter>
                                        <asp:Parameter Name="LinkHotelID" Type="Int32"></asp:Parameter>
                                        <asp:Parameter Name="NumRooms" Type="Int32"></asp:Parameter>
                                        <asp:Parameter Name="DateIn" Type="DateTime"></asp:Parameter>
                                        <asp:Parameter Name="DateOut" Type="DateTime"></asp:Parameter>
                                        <asp:Parameter Name="Notes" Type="String"></asp:Parameter>
                                        <asp:Parameter Name="AllotID" Type="Object"></asp:Parameter>
                                    </UpdateParameters>
                                </asp:SqlDataSource>
                                <asp:GridView ID="AllotGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="AllotID" DataSourceID="AllotDataSource" OnRowCommand="AllotGridView_RowCommand">
                                    <Columns>
                                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"></asp:CommandField>
                                        <asp:BoundField DataField="NumRooms" HeaderText="NumRooms" SortExpression="NumRooms"></asp:BoundField>
                                        <asp:BoundField DataField="DateIn" HeaderText="DateIn" SortExpression="DateIn"></asp:BoundField>
                                        <asp:BoundField DataField="DateOut" HeaderText="DateOut" SortExpression="DateOut"></asp:BoundField>
                                        <asp:BoundField DataField="Notes" HeaderText="Notes" SortExpression="Notes"></asp:BoundField>
                                        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name"></asp:BoundField>
                                        <asp:BoundField DataField="Grade" HeaderText="Grade" SortExpression="Grade"></asp:BoundField>                                            
                                    </Columns>                                        
                                    <EmptyDataTemplate>
                                        <p style="font-style: italic">Add a new allotment:</p>
                                        <table style="font-size:small">
                                            <tr>
                                                <th>Hotel
                                                </th>
                                                <th># Rms
                                                </th>
                                                <th>From
                                                </th>
                                                <th>To
                                                </th>
                                                <th>Notes
                                                </th>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <asp:DropDownList ID="htlDDL" runat="server" DataSourceID="HtlDataSource" DataTextField="Name" DataValueField="htID"></asp:DropDownList>
                                                </td>
                                                <td>
                                                    <asp:TextBox ID="NoRoomsBox" runat="server" Width="10px"></asp:TextBox>
                                                </td>
                                                <td>
                                                    <asp:TextBox ID="DateInBox" runat="server" TextMode="Date"></asp:TextBox>
                                                </td>
                                                <td>
                                                    <asp:TextBox ID="DateOutBox" runat="server" TextMode="Date"></asp:TextBox>
                                                </td>
                                                <td>
                                                    <asp:TextBox ID="NotesBox" runat="server" TextMode="MultiLine"></asp:TextBox>
                                                </td>
                                                <td>
                                                    <asp:Button ID="AddHtlBut" runat="server" CausesValidation="false" Text="Add" CssClass="button" CommandName="emptyInsert"></asp:Button>
                                                </td>
                                            </tr>
                                        </table>
                                    </EmptyDataTemplate>
                                </asp:GridView>

これは背後にあるコードです:

  protected void AllotGridView_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName.Equals("emptyInsert"))
        {
            try
            {
                GridView childGrid = (GridView)sender;
                GridViewRow parentGridRow = (GridViewRow)childGrid.Parent.Parent;
                Control control = parentGridRow.Controls[0];
                string convID = (control.FindControl("ConvID") as HiddenField).Value;

                control = childGrid.Controls[0].Controls[0];
                string hotelID = (control.FindControl("htlDDL") as DropDownList).SelectedValue;
                string nRooms = (control.FindControl("NoRoomsBox") as TextBox).Text;
                string dateIn = (control.FindControl("DateInBox") as TextBox).Text;
                string dateOut = (control.FindControl("DateOutBox") as TextBox).Text;
                string note = (control.FindControl("NotesBox") as TextBox).Text;

                OleDbConnection Bconn = new OleDbConnection(ConfigurationManager.ConnectionStrings["BlastConnString"].ConnectionString);

                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "INSERT INTO Allotment(LinkConvID, LinkHotelID, NumRooms, DateIn, DateOut, Notes) VALUES (?, ?, ?, ?, ?, ?)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = Bconn;

                cmd.Parameters.Add("LinkConvID", OleDbType.VarChar).Value = convID;
                cmd.Parameters.Add("LinkHotelID", OleDbType.Integer, 4).Value = Convert.ToInt16(hotelID);
                cmd.Parameters.Add("NumRooms", OleDbType.Integer, 4).Value = Convert.ToInt16(nRooms);
                cmd.Parameters.Add("DateIn", OleDbType.Date).Value = Convert.ToDateTime(dateIn);
                cmd.Parameters.Add("DateOut", OleDbType.Date).Value = Convert.ToDateTime(dateOut);
                cmd.Parameters.Add("Notes", OleDbType.VarChar).Value = note;

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                Bconn.Dispose();
            }
            catch (OleDbException ex)
            {
                SQLErrorLabel.Text = ex.ToString();
            }
        }

        ConvGridView.DataBind();

    }
}

エラーメッセージを含めるのを忘れて申し訳ありません:

[OleDbException (0x80004005): 不明なエラー] System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 動作、文字列メソッド) +745 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +107 System.Web.UI.WebControls.SqlDataSourceView. ExecuteDbCommand(DbCommand コマンド、DataSourceOperation 操作) +380 System.Web.UI.WebControls.SqlDataSourceView.ExecuteDelete(IDictionary キー、IDictionary oldValues) +568 System.Web.UI.DataSourceView.Delete(IDictionary キー、IDictionary oldValues、DataSourceViewOperationCallback コールバック) + 84 System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow 行、Int32 rowIndex) +930 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e、Boolean causeValidation、String validationGroup) +974 System.Web.UI. WebControls.GridView.RaisePostBackEvent(String eventArgument) +205 System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642898 System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +1724ブール値 includeStagesAfterAsyncPoint) +1724ブール値 includeStagesAfterAsyncPoint) +1724

編集:問題を分離しました。このテーブルに sqldatasource と基本的な GridView のみを含む空白のページを作成しましたが、[削除] ボタンには同じエラー メッセージが表示されます。MS SQL 2000 に接続しており、OleDb を使用する必要があります...それが問題になる可能性はありますか? 修正するにはどうすればよいですか?

4

1 に答える 1

0

私が直す。sqldatasource は MSSQL 2000 でレコードを削除できません。ADO.NET を使用し、カスタムの削除ボタンを使用する必要がありました

于 2013-04-06T05:14:03.873 に答える