爬上天的窝牛

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
ASP.NET2.0中对objetData数据操作时提示“未能找到带参数的非泛型方法”的解决方案
   

昨日发了一篇 费解的.net2.0中的ObjectDataSource控件
说真的,直到发这篇日志前10分钟,我还在为那可恶的形如:
ObjectDataSource“ObjectDataSource1”未能找到接受“EntityLayer.ArticleTypeEntity”类型的参数的非泛型方法“Delete”而郁闷。但,现在可以告别那种错误了。解决的方法真的是很简单,把参数名和字段名设为一致就行了。
来具体说说吧:
public void InsertNew(string MASTERNAME, string SITEURL, string RSSURL, string email, int CATEGORY_ID)
     {
         string sql = "insert into [rss_info](MASTERNAME,RSSURL,SITEURL,EMAIL,CATEGORY_ID) values (@MASTERNAME,@RSSURL,@SITEURL,@EMAIL,@CATEGORY_ID)";
         using (conn = new SqlConnection(_strconn))
         {
             SqlCommand comm = new SqlCommand(sql, conn);
             comm.Parameters.Add("@MASTERNAME", SqlDbType.VarChar, 50).Value = MASTERNAME;
             comm.Parameters.Add("@RSSURL", SqlDbType.VarChar, 100).Value = RSSURL;
             comm.Parameters.Add("@SITEURL", SqlDbType.VarChar, 100).Value = SITEURL;
             comm.Parameters.Add("@EMAIL", SqlDbType.VarChar, 50).Value = email;
             comm.Parameters.Add("@CATEGORY_ID", SqlDbType.Int).Value = CATEGORY_ID;
             conn.Open();
             comm.ExecuteNonQuery();
         }
     }
这是中间一层的Insert数据的代码,方法名:
public void InsertNew(string MASTERNAME, string SITEURL, string RSSURL, string email, int CATEGORY_ID)
注意这里的所有参数名和数据表中的字段名是完全一致的,Parameters的参数名也是在字段名的基础之上加一个@符号,这样,才能保证执行成功。
如果把mastername改成m_name,则会出错,这是在类文件中要注意的。

再来看看.aspx文件中的ObjectDataSource控件中要注意的地方:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="delete"
             InsertMethod="InsertNew" SelectMethod="getAll" TypeName="demo" OnDeleting="ObjectDataSource1_Deleting">
             <DeleteParameters>
                 <asp:Parameter Name="masterid" Type="Int32" />
             </DeleteParameters>
             <InsertParameters>
                 <asp:Parameter Name="MASTERNAME" Type="String"/>
                 <asp:Parameter Name="SITEURL" Type="String" />
                 <asp:Parameter Name="RSSURL" Type="String" />
                 <asp:Parameter Name="EMAIL" Type="String" />
                 <asp:Parameter Name="CATEGORY_ID" Type="Int32" />
             </InsertParameters>
         </asp:ObjectDataSource>
<insertParameters>中的相关参数要与Insert方法中的参数名一致,否则也会出现那讨厌的错误提示。

注意了这二点,就不会出什么问题了。

解决这个问题也费了一番心思,在csdn上搜了一下,发现遇到这种问题的朋友也很多,这也难怪,谁知道参数的命名要与字段名一致呢?所以,用ObjectDataSource时,最好在方法名后传递一个Entry的实例。

参考:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/objectdatasource.mspx?mfr=true

来源:幻想曲.Net-苦中作乐

posted on 2007-03-29 01:00  窝牛  阅读(462)  评论(1)    收藏  举报