没有定义和装配方法的扩展方法缺失?

时间:2014-04-14 14:43:53

标签: c# winforms

这是一个常见的错误,通常我能够解决它。

我有一个班级:

HierarchyData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace CT_WMT.App_Code
{
    public class HierarchyData
    {
        string sqlConnectionString = ConfigurationManager.ConnectionStrings["SnaggingMasterConnection"].ConnectionString;

        public DataTable GetHierarchyData()
        {
            using (SqlConnection connection = new SqlConnection(sqlConnectionString))
            {
                SqlCommand command = new SqlCommand("sp_GetHierachy", connection);
                command.CommandType = CommandType.StoredProcedure;

                DataTable dt = new DataTable();

                try
                {
                    command.Connection.Open();
                    dt.Load(command.ExecuteReader());
                }
                catch (Exception ex)
                {
                    string errorMessage = ex.Message.ToString();
                }

                return dt;
            }
        }
    }
}

这是我的网络表单:

Screenshot

我想我只是错过了它,它就在我面前!

4 个答案:

答案 0 :(得分:1)

您需要使用完全限定的HierarchyData

来引用namespace

试试这个:

CT_WMT.App_Code.HierarchyData myClass = new CT_WMT.App_Code.HierarchyData();
DataTable dt = myClass.GetHierarchy();

答案 1 :(得分:1)

系统无法区分HierarchyData页面(全名CT_WMT.Secure.HierarchyData.HierarchyData)和HierarchyData数据加载类(全名CT_WMT.App_Code.HierarchyData)。

你可以:

  1. 使用全名:

    CT_WMT.App_Code.HierarchyData myClass = new CT_WMT.App_Code.HierarchyData();
    DataTable dt = myClass.GetHierarchyData();
    
  2. 为HierarchyData声明数据加载类

    的别名
    using HierarchyDataLoader = CT_WMT.App_Code.HierarchyData; 
    ...
    HierarchyDataLoader myClass = new HierarchyDataLoader();
    DataTable dt = myClass.GetHierarchyData();
    
  3. 重命名其中一个或两个,以便每个类都有一个唯一的名称,例如:将Page后缀添加到页面,或Loader后缀添加到加载程序类。

答案 2 :(得分:0)

您的两个部分类位于不同的命名空间中,使它们成为不同的类型。它们需要位于同一名称空间中才能成为相同类型的部分定义。他们这两个都需要partial个关键字。

您还应该评估您是否真的希望这些类型成为同一类的部分定义;考虑简单地使用两种不同的类型,其中完全独立的类型负责此数据库查询。

您还应避免捕获异常并对其执行任何操作。如果您没有任何有意义的方法来处理错误,请不要试图抓住它。

答案 3 :(得分:0)

在屏幕截图中,HierarchyData指的是您的ASP.NET页面(CT_WMT.Secure.HierarchyData),它与App_Code(CT_WMT.App_Code.HierarchyData)中的类名称相同。

不确定您是否希望App_Code中的那个成为部分类,因此不是ASP.NET页面的一部分。如果这样做,则需要将其设置为partial,并使其成为同一名称空间的一部分。无论如何,您需要排序类名/命名空间问题。