百度就查到一个和我问题一样的!~!~最终也没有解决办法!~不知道是什么原因呀。
总是提示  “Do.SQLServerDAL.selectPerform”并不包含“excount()”的定义Do.SQLServerDAL.selectPerform   类
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace Do.SQLServerDAL
{
    public class selectPerform
    {
        private SqlConnection conn;
        private SqlCommand comm;
        private SqlDataAdapter da;
        private DataTable dtable;
        private SqlDataReader dr;
        public string CommandText;
        public selectPerform()
        {
            conn = new SqlConnection(Config.connStr);
            comm = new SqlCommand();
        }
        private void commConfig()
        {
            
            comm.Connection = conn;
            comm.CommandType = CommandType.StoredProcedure;
            comm.CommandText = CommandText;
        }
        public int excount()
        {
                commConfig();
                if (conn.State == ConnectionState.Open) { conn.Close(); }
                conn.Open();
                return comm.ExecuteNonQuery();
        }
        public DataTable dt()
        {
            commConfig();
            da = new SqlDataAdapter(comm);
            dtable = new DataTable();
            da.Fill(dtable);
            return dtable;
        }
        public SqlDataReader DReader()
        {
            commConfig();
            if (conn.State == ConnectionState.Open) { conn.Close(); }
            conn.Open();
            dr= comm.ExecuteReader(CommandBehavior.CloseConnection);
            return dr;
        }
        
        public void closeReader()
        {
            conn.Close();
            dr.Close();
        }
        public string this[string var]
        {
            get { return ""; }
            set
            {
                comm.Parameters.AddWithValue(var, value);
            }
        }
    }
}
页面调用:Do.SQLServerDAL.selectPerform sp = new Do.SQLServerDAL.selectPerform();
            sp.CommandText = "Do_NewsUpdate";
            sp["Id"] = HiddenField1.Value.ToString();
            if (sp.excount() == 1)          就到这里提示错误
{

}Do.SQLServerDAL.selectPerform类生成一切正常,一出问题的时候吧。我就重新生成一下那个类,有的时候就好一下,页面可以生成通过!~,可是过不了一分钟。就又提示那个错误了。总是这样。。写代码的时候Do.SQLServerDAL.selectPerform  点一下,出来方法列表里还可以选到excount()  但就是编译,调试的时候就总是找不到,有的时候勉强生成好了,一浏览,还是提示这个错误。我是把那个方法改名,换成索引器。也都是老样子。!~我就郁闷了!~好几天了!~!~整地我都没心情干活了!~帮帮忙吧!~我是不到迫不得已,不能在这里发贴求助的,求你们了。帮帮

解决方案 »

  1.   

    换成接口的方式试一试,
    即声明接口IDataTest,
    该接口包含方法public int excount(),
    selectPerform类实现该接口,通过接口调用
      

  2.   

    换成接口的方式试一试,
    即声明接口IDataTest,
    该接口包含方法public int excount(),
    selectPerform类实现该接口,通过接口调用
      

  3.   

    return comm.ExecuteReader试试。
     ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete  语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1
      

  4.   

    你确定已为sp创建了名为"[Id]"的SqlParameter吗?
    sp["Id"] = HiddenField1.Value.ToString(); 
      

  5.   

    谢谢各位,接口没试过。一会儿试试。excount()方法主要就是更新数据,进行数据操作的。要反回影响行数的,除了ExecuteReader能接收到返回的影响行数吗?
    3tzjq 谢谢你的参与,我那只是列出一个ID,表示出个意思,那个没问题。里面的方法,命令什么的都没有问题,刚开始写完这个方法的时候没有问题,几天以后出现的这个问题。不知道是什么原因老是查不到
      

  6.   

    应该是你里面的连接没有关闭重新打开产生的问题。
     public int excount()
            {
                    commConfig();
                    if (conn.State == ConnectionState.Open) { conn.Close(); }
                    conn.Open();
                    return comm.ExecuteNonQuery();
            }Open()后直接返回了影响行。没有close()
      

  7.   

    从代码角度来说是没有任何问题的。但是如果2个人同时访问。就要出问题了。
    建议先OPEN过后就CLOSE
    不要将一个连接长时间OPEN。即占资源。也不安全。
      

  8.   

    public int excount() 
            { 
                    int i=0;
                    commConfig(); 
                    if (conn.State == ConnectionState.Open) { conn.Close(); } 
                    conn.Open(); 
                    i = comm.ExecuteNonQuery(); 
                    conn.close();
                    return i;
            } 
      

  9.   

    难不成你这个dll偶尔被没有写过这个函数的老版本覆盖le ?,,,,,,
      

  10.   

    我删除,重新生成过了郁闷!~是喔!·~
    我也考虑过这个问题!~
    但是我用Reflector查看的时候,没有复盖!~里面有这个方法!~!~还是郁闷喔!~
      

  11.   

    单步调试一下吧!! ,不行,删除bin。再不行,重启。再不行,把电脑砸了。
      

  12.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;namespace Do.SQLServerDAL
    {
        public class selectPerform
        {
            private SqlConnection conn;
            private SqlCommand comm;
            //private SqlDataAdapter da;
            //private DataTable dtable;
            //private SqlDataReader dr;
            public string CommandText;
            public selectPerform()
            {
                conn = new SqlConnection();//(Config.connStr);
                comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandType = CommandType.StoredProcedure;
                comm.CommandText = CommandText;
            }
            //private void commConfig()
            //{
            //    comm.Connection = conn;
            //    comm.CommandType = CommandType.StoredProcedure;
            //    comm.CommandText = CommandText;
                
            //}
            public int excount()
            {
                //commConfig();
                //if (conn.State == ConnectionState.Open) { conn.Close(); }
                //conn.Open();
                try
                {
                    conn.Open();
                    return comm.ExecuteNonQuery();
                }
                catch (Exception e1){ throw e1;}
                finally
                {
                    if (conn.State == ConnectionState.Open) { conn.Close(); }
                }
            }
            public DataTable dt()
            {
                //commConfig();
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(comm);//局部变量最好定义在方法中 这样方便系统回收
                    DataTable dtable = new DataTable();
                    da.Fill(dtable);
                    return dtable;
                }
                catch (Exception e1) { throw e1; }
                finally
                {
                    if (conn.State == ConnectionState.Open) { conn.Close(); }
                }
            }
            public SqlDataReader DReader()
            {
                //commConfig();
                try
                {
                    if (conn.State == ConnectionState.Open) { conn.Close(); }
                    conn.Open();
                    SqlDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
                    return dr;
                }
                catch (Exception e1) { throw e1; }
            }        //public void closeReader()//这个方法可有可无 外面关闭是一样的
            //{
            //    //conn.Close();
            //    dr.Close();
            //}
            public void ClearParameters()//可能少的就是这个方法 ,我只看到了添加没看到删除
            {
                comm.Parameters.Clear();
            }
            public string this[string var]
            {
                get { return ""; }
                set
                {
                    comm.Parameters.AddWithValue(var, value);
                }
            }
        }
    }自己看看吧 我稍微改了下
      

  13.   

    cancerser 你好。谢谢你为我指点了这么多问题。!~我将方法改成你帮我改的以后,excount()选都选不到了不知道为什么!!~~!就这一个方法。我就郁闷了!~
      

  14.   

    这是正常生成输模式输的信息==============================================================================
    ------ 已启动生成: 项目: Do.model, 配置: Debug Any CPU ------
    生成启动时间 2008-11-25 18:15:37。
    目标 _CopyFilesMarkedCopyLocal:
        正在将文件从“bin\Do.SQLServerDAL.dll”复制到“..\..\..\企业网站CMS\bin\Do.SQLServerDAL.dll”。
        正在将文件从“bin\Do.SQLServerDAL.pdb”复制到“..\..\..\企业网站CMS\bin\Do.SQLServerDAL.pdb”。
    目标 CopyFilesToOutputDirectory:
        Do.model -> E:\制作\web\测试程序\企业网站CMS\bin\Do.model.dll生成成功。已用时间 00:00:00.07
    ------ 已启动生成: 项目: E:\...\企业网站CMS\, 配置: Debug .NET ------
    正在验证网站
    正在生成目录“/企业网站CMS/Inc/Default/”。
    正在生成目录“/企业网站CMS/manage/AdminDefaultTheme/”。
    正在生成目录“/企业网站CMS/manage/ChanngeMenu/”。
    正在生成目录“/企业网站CMS/manage/”。E:\制作\web\测试程序\企业网站CMS\manage\Catalog.aspx.cs(61,16): 错误 CS0117: “Do.SQLServerDAL.selectPerform”并不包含“excount”的定义
    E:\制作\web\测试程序\企业网站CMS\manage\Catalog.aspx.cs(76,13): 错误 CS0019: 运算符“==”无法应用于“Do.SQLServerDAL.selectPerform”和“int”类型的操作数
    E:\制作\web\测试程序\企业网站CMS\manage\Catalog.aspx.cs(110,16): 错误 CS0117: “Do.SQLServerDAL.selectPerform”并不包含“excount”的定义
    E:\制作\web\测试程序\企业网站CMS\manage\News.aspx.cs(170,20): 错误 CS0117: “Do.SQLServerDAL.selectPerform”并不包含“excount”的定义
    E:\制作\web\测试程序\企业网站CMS\manage\About.aspx.cs(86,20): 错误 CS0117: “Do.SQLServerDAL.selectPerform”并不包含“excount”的定义
    E:\制作\web\测试程序\企业网站CMS\manage\About.aspx.cs(161,16): 错误 CS0117: “Do.SQLServerDAL.selectPerform”并不包含“excount”的定义
    验证完成
    ------ 已启动生成: 项目: Do.SQLServerDAL, 配置: Debug Any CPU ------
    生成启动时间 2008-11-25 18:15:41。
    目标 CopyFilesToOutputDirectory:
        正在将文件从“obj\Debug\Do.SQLServerDAL.dll”复制到“..\..\..\企业网站CMS\bin\Do.SQLServerDAL.dll”。
        Do.SQLServerDAL -> E:\制作\web\测试程序\企业网站CMS\bin\Do.SQLServerDAL.dll
        正在将文件从“obj\Debug\Do.SQLServerDAL.pdb”复制到“..\..\..\企业网站CMS\bin\Do.SQLServerDAL.pdb”。生成成功。已用时间 00:00:00.06
    ===================================================================================看这生成顺序是不是有问题?生成两次Do.SQLServerDAL
    开始一次,结尾一次!~~!
      

  15.   

    哈哈哈哈!~我找到问题啦!~~!~!
    喔喔!~哈哈哈!~高兴死我了!~~!!~
    谢谢各位朋友,哇哈哈!~!~!~原来是,我还有一个类库,Do.model  这个类库是要引用Do.SQLServerDAL这个类库的.但是当Do.SQLServerDAL更新 的时候Do.model所引用的Do.SQLServerDAL没有更新,还是旧版的.当生成页面的时候,那个没有更新过的Do.SQLServerDAL类库就随Do.model  把更新过的Do.SQLServerDAL给覆盖了!~
    这也许就是24楼我发出的输信息所显示的原因吧,哈哈.12楼兄弟,谢啦.你的意见让我更加有信心的把问题放在这个问题上面查找.哈哈.以后大家要注意喽!!~我不知道你们出没出过这问题哈!~
    反正都要注意一下喽!!~我好高兴呀.郁闷我N天的问题!终于解决了!~!结贴.给分,人人有份!~~!!~