博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net中ObjectDataSource“”未能找到带参数的非泛型方法“DelnewsClass”: p1, id 问题
阅读量:2399 次
发布时间:2019-05-10

本文共 4127 字,大约阅读时间需要 13 分钟。

asp.net真是让人欢喜让人忧,明明一个很智能,很nice的ObjectDataSource的listView工具,却搞个参数问题来困扰人

我用的是ObjectDataSource,然后用listView,希望智能生成一个增删改删.结果可以查出,但删除都报类似标题的错误.

查了很久,发现它问题就出在这两个文件中

数据列表1.aspx文件中的

 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="MyWebApplication.增删改查.App_Data.DataSetUser" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" TypeName="MyWebApplication.增删改查.App_Data.DataSetUserTableAdapters.t_userTableAdapter" UpdateMethod="Update">

            <InsertParameters>
                <asp:Parameter Name="p1" Type="Int32" />
                <asp:Parameter Name="p2" Type="String" />
                <asp:Parameter Name="p3" Type="Int32" />
                <asp:Parameter Name="p4" Type="Int32" />
            </InsertParameters>
        </asp:ObjectDataSource>

OldValuesParameterFormatString 这个我感觉可以看作是往下面一串红的地方传参数的,所以这个可以设为{0} 不知道为啥自动生成还加了个玩意搞破坏

asp:Parameter Name  这个的值要和上面传进来的一致,但是显示自动生成的也不一致

DataSetStudents.Designer.cs这个文件中看

 public virtual int Insert(string p1, int p2, string p3, int p4) {

            if ((p1== null)) {
                throw new global::System.ArgumentNullException("p1");
            }
            else {
                this.Adapter.InsertCommand.Parameters[0].Value = ((string)(p1));
            }
            this.Adapter.InsertCommand.Parameters[1].Value = ((int)(p2));
            if ((p3== null)) {
                throw new global::System.ArgumentNullException("p3");
            }
            else {
                this.Adapter.InsertCommand.Parameters[2].Value = ((string)(p3));
            }
            this.Adapter.InsertCommand.Parameters[3].Value = ((int)(isVip));
            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open)
                        != global::System.Data.ConnectionState.Open)) {
                this.Adapter.InsertCommand.Connection.Open();
            }
            try {
                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
                return returnValue;
            }
            finally {
                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
                    this.Adapter.InsertCommand.Connection.Close();
                }
            }
        }

这个文件里的形参,要和上面保持一致. 说实在的,这个不理解为何形参也要保证名称一致

我有试过把数据列表1.aspx文件一致,但还是跑不过,人家就这样了.修改如下

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete" InsertMethod="Insert" OldValuesParameterFormatString="{0}" SelectMethod="GetData" TypeName="MyWebApplication.增删改查.App_Data.DataSetStudentsTableAdapters.t_studentsTableAdapter" UpdateMethod="Update">

            <DeleteParameters>
                <asp:Parameter Name="id" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="name" Type="String" />
                <asp:Parameter Name="age" Type="Int32" />
                <asp:Parameter Name="gender" Type="String" />
                <asp:Parameter Name="isVip" Type="Int32" />
            </InsertParameters>

 public virtual int Insert(string name, int age, string gender, int isVip)

这样就可以保持一致了.可以运行了.

但是这种改法,完全是把一个很智能的东东改得跟个二百五似的.所以换一种改法,在OldValuesParameterFormatString 想办法改改成传进去的参数就是p1,p2啥的

那就把

<EditItemTemplate>

                <tr style="background-color: #FFCC66;color: #000080;">
                    <td>
                        <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
                        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" />
                    </td>
                    <td>
                        <asp:Label ID="idLabel1" runat="server" Text='<%# Eval("id") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="ageTextBox" runat="server" Text='<%# Bind("age") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="genderTextBox" runat="server" Text='<%# Bind("gender") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="isVipTextBox" runat="server" Text='<%# Bind("isVip") %>' />
                    </td>
                </tr>
            </EditItemTemplate>

改成类似

<InsertItemTemplate>

                <tr style="">
                    <td>
                        <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" />
                        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />
                    </td>
                    <td>&nbsp;</td>
                    <td>
                        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("p1") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="ageTextBox" runat="server" Text='<%# Bind("p2") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="genderTextBox" runat="server" Text='<%# Bind("p3") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="isVipTextBox" runat="server" Text='<%# Bind("p4") %>' />
                    </td>
                </tr>
            </InsertItemTemplate>

发现有部分是可以的,但是Eval,Bind需要展现的部分又是不行的,应该是自动生成是名子就起好了.所以改起来,还是个二百五.反正记得三个都得一样一样的就行了.碎觉

你可能感兴趣的文章
基于Oracle的私有云架构探析(连载一)
查看>>
使用pg_stat_statement监控pgsql遇到的问题
查看>>
ASM 翻译系列第十弹:ASM Internal ASM DISK header
查看>>
ASM 翻译系列第一弹:基础知识 ASM AU,Extents,Mirroring 和 Failgroups
查看>>
MySQL排序内部原理探秘
查看>>
ASM 翻译系列第八弹:ASM Internal ASM file extent map
查看>>
利用sys schema解决一次诡异的语句hang问题
查看>>
数据库容器化|未来已来
查看>>
容器化RDS|计算存储分离架构下的 IO 优化
查看>>
控制文件不一致引发的“血案”
查看>>
MySQL 5.7复制配置不规范修改导致的坑(一)
查看>>
MySQL8.0——Resource Group(资源组)
查看>>
基于Oracle的私有云架构探析(连载二)
查看>>
MySQL分区如何迁移
查看>>
Oracle压缩黑科技(一)—基础表压缩
查看>>
容器化RDS—计算存储分离架构下的“Split-Brain”
查看>>
挽救DG中主库的nologging操作的块
查看>>
容器化RDS:PersistentLocalVolumes和VolumeScheduling
查看>>
关于legacy system中使用bind variables(zt)
查看>>
mysql执行命令报segmentation fault 错误
查看>>