苦恼一:经常遇到要对数据库打开然后读写的操作,代码有很多重复相似的地方,比如说连接字符串,等等。听人说写到一个公共类比较方便,但我还不会写,哪位大侠能给个例子(并给一个调用的例子),谢谢!
苦恼二:经常要在一个窗体里进行操作,在另一个窗体的某个控件上显示数据比如FORM2中点击“确定”BT,在FORM1.DATAGRIDVIEW1中反回结果,但通常状态下是看不到DATAGRIDVIEW1的,即使将DATAGRIDVIEW1设置为public,我的做法是“确定”事件中NEW一个FORM1才行,请问本来就有一个FROM1了,再NEW一个行不行,是不是造成资源浪费?高手们是如何处理这类问题的?谢谢!
苦恼三:我自己写了个小的程序,就是有数据录入删除修改与检索之类的功能,但有个问题,内存占用总在一点点升高,在我执行完每个操作后,所有的非主界面我都是不用了就CLOSE掉,所以连接也都即时的CLOSE掉了,但不知道为什么,还是一点点再长,如何解决?谢谢!

解决方案 »

  1.   

    (1)你既然自己会做基本的数据库流程,就编一个类吧
        
    (2)把form1 的 datagridview 传给form2的构造函数,这样就可以在form2里面操作form1的控件了
    (3)
    form 你不需要的话不但要close
    而且要释放资源。dispose
      

  2.   

    1、请参考MS的SqlHelper
    2、多窗体间传值,请参考
    http://blog.csdn.net/zxliujason/archive/2007/08/04/1725645.aspx
    3、属于优化方面的问题
      

  3.   

    1.推荐看看微软的SqlHelper,关于连接字符串最好存到配置文件中以便方便更改,如xml文件,或者程序的配置文件,
    2.可以把form1传给form2
    可以在form1中写
    例如 form2 f2 = new form2(this);
    f2.show() 或者f2.showDialog();
    这样就把form1的实例穿了过去,或者你直接把dataGridview传给form2
    3.这个问题就要具体分析,看过程序才知道
      

  4.   

    1)网上搜一下吧 一大把 DBUtility2)用全局变量也可以解决
    3)
    还是参看一下.NET的dispose模式
    .NET本质论里面有详细介绍
    windows编程推荐 Chars PetZold 的C#高级编程 非常经典
      

  5.   

    苦恼一:经常遇到要对数据库打开然后读写的操作,代码有很多重复相似的地方,比如说连接字符串,等等。听人说写到一个公共类比较方便,但我还不会写,哪位大侠能给个例子(并给一个调用的例子),谢谢!
    ================================================================================
    using System;
    using System.Data ;
    using System.Data .SqlClient ;namespace SqlHelper
    {
    /// <summary>
    /// DataBase 的摘要说明。
    /// </summary>
    public class DataBase
    {
    private string strconn;
    private SqlConnection conn;
    public DataBase()
    {
    strconn=System.Configuration .ConfigurationSettings .AppSettings ["strconn"].ToString ();
    conn=new SqlConnection (strconn);
    }
    public void Open()
    {
    try
    {conn.Open ();}
    catch(Exception ex)
    {
    throw new Exception (ex.Message );
    }
    }
    public void Close()
    {
    if(conn.State !=ConnectionState.Closed )
    {
    conn.Close ();
    }
    }
    public SqlCommand GetCmd(string proc,SqlParameter[]paralist)
    {
    SqlCommand cmd=new SqlCommand ();
    cmd.CommandType =CommandType.StoredProcedure ;
    cmd.CommandText =proc;
    cmd.Connection =conn;

    if(paralist!=null)
    {
    foreach (SqlParameter para in paralist)
    {
    cmd.Parameters .Add (para);
    }
    }
    return cmd;
    }
    public int GetNonQuery(string proc,SqlParameter[]paralist)
    {
    Open();
    SqlCommand cmd=GetCmd(proc,paralist);
    int i=cmd.ExecuteNonQuery ();
    Close();
    return i;
    }
    public SqlDataReader GetDataReader(string proc,SqlParameter[]paralist)
    {
    Open();
    SqlCommand cmd=GetCmd(proc,paralist);
    SqlDataReader dr=cmd.ExecuteReader (CommandBehavior.CloseConnection );
    return dr; }
    public DataSet GetDataSet(string proc,SqlParameter[]paralist)
    {
    SqlCommand cmd=GetCmd(proc,paralist);
    SqlDataAdapter da=new SqlDataAdapter (cmd);
    DataSet ds=new DataSet ();
    da.Fill (ds);
    return ds; }
    public DataView GetDataList(int start,int size,string proc,SqlParameter[]paralist)
    {
    SqlCommand cmd=GetCmd(proc,paralist);
    SqlDataAdapter da=new SqlDataAdapter (cmd);
    DataSet ds=new DataSet ();
    da.Fill (ds,start,size,"Score");
    return ds.Tables ["Score"].DefaultView ;
    }
    }
    }
    下面是调用
    private DataBase mydb=new DataBase ();
    public DataSet ShowBook()
    {
    DataSet ds=mydb.GetDataSet ("pr_showBook_Book",null);
    return ds;
    }
      

  6.   

    这是Web.config里面的
    <configuration>
    <appSettings><add key="strconn" value="server=.;database=BookShop_06003;uid=sa;pwd=sa"></add>
    </appSettings>
      

  7.   

    解决苦恼二:在Form2中直接修改数据库,按确定确认修改,返回到Form1,form1的DataGridView再直接从数据库中去取数据显示,不用跟Form2有什么联系。
      

  8.   

    不说了
    tangserver()说的已经很详细了