我在c#项目ABC中新建了一个模版类,superForm,代码如下: 
namespace abc{ 
    public class superForm:Form 
    { 
        public virtual void COMIP1() { } 
        public virtual void COMIP2() { } 
        public virtual void COMIP3() { } 
    } 

在DBHelper类中如下书写: 
namespace ABC 

    class DBHelper 
    { 
        private static String sql = "...."; 
        private static string sqlConnStr = "..." + sql + "..."; 
        //创建数据库操作字符串变量,并赋予初始值为空 
        public static string sqlstr = " "; 
        public static SqlConnection conn = new SqlConnection(sqlConnStr); 
        public static SqlCommand comm; 
        public static SqlDataReader datareader; 
        //创建数据下载方法 
        public static void ReadData(superForm a,int b) { 
            try 
            { 
                comm = new SqlCommand(sqlstr, conn); 
                conn.Open(); 
                datareader = comm.ExecuteReader(); 
                if( b == 1) a.COMIP1(); 
                if (b == 2) a.COMIP2(); 
                if (b == 3) a.COMIP3(); 
                datareader.Close(); 
            } 
            catch (Exception ex) 
            { 
                MessageBox.Show(ex.Message); 
            } 
            finally 
            { 
                conn.Close(); 
            } 
        } 
    } 

然后在所有的新建窗体中继承superForm这个模版,并对这个模版的任意三个虚方法进行重写 
如在窗体ceshi中如下书写: 
using System.Windows.Forms; namespace ABC 

    public partial class Ceshi :superForm 
    { 
        override public void COMIP1() {...} 
        //仅仅对数据库操作字符串sqlstr进行重新赋值,然后调用DBHelper中对应的读写方法就可以实现 
        //用当前窗体中改写后的COMIP1()方法对DBHelper.dataReader进行操作 
        private void FillListView()[ 
          lvStudent.Items.Clear(); 
          DBHleper.sqlstr="......"; 
          DBHLeper.readData(this,1); 
        ] 
    } 

现在可以运行,而且没有错误了,但是我想问问各位大虾,这样有没有安全性的问题?如果有,安全性问题是什么?有没有别的办法能把这段代码改进一下让他更加完善? 
非常急切的希望得到您的帮助,不胜感激!

解决方案 »

  1.   

    我是一个C#初学者
    上面这段代码主要是为了实现将类似的数据库联接异常处理以及连接方法都交给DBHelper处理,在每一个窗口中 只需要调用对应的数据上传下载方法,同时改写获取数据后的数据操作方法就可以实现即时获取数据,不知道这样对代码安全性有没有影响,我对安全性没有什么概念,希望各位大虾能帮忙看看,有什么需要注意的地方,还有就是有没有更好的方法能实现这种想法?