苦恼一:经常遇到要对数据库打开然后读写的操作,代码有很多重复相似的地方,比如说连接字符串,等等。听人说写到一个公共类比较方便,但我还不会写,哪位大侠能给个例子(并给一个调用的例子),谢谢!
苦恼二:经常要在一个窗体里进行操作,在另一个窗体的某个控件上显示数据比如FORM2中点击“确定”BT,在FORM1.DATAGRIDVIEW1中反回结果,但通常状态下是看不到DATAGRIDVIEW1的,即使将DATAGRIDVIEW1设置为public,我的做法是“确定”事件中NEW一个FORM1才行,请问本来就有一个FROM1了,再NEW一个行不行,是不是造成资源浪费?高手们是如何处理这类问题的?谢谢!
苦恼三:我自己写了个小的程序,就是有数据录入删除修改与检索之类的功能,但有个问题,内存占用总在一点点升高,在我执行完每个操作后,所有的非主界面我都是不用了就CLOSE掉,所以连接也都即时的CLOSE掉了,但不知道为什么,还是一点点再长,如何解决?谢谢!
苦恼二:经常要在一个窗体里进行操作,在另一个窗体的某个控件上显示数据比如FORM2中点击“确定”BT,在FORM1.DATAGRIDVIEW1中反回结果,但通常状态下是看不到DATAGRIDVIEW1的,即使将DATAGRIDVIEW1设置为public,我的做法是“确定”事件中NEW一个FORM1才行,请问本来就有一个FROM1了,再NEW一个行不行,是不是造成资源浪费?高手们是如何处理这类问题的?谢谢!
苦恼三:我自己写了个小的程序,就是有数据录入删除修改与检索之类的功能,但有个问题,内存占用总在一点点升高,在我执行完每个操作后,所有的非主界面我都是不用了就CLOSE掉,所以连接也都即时的CLOSE掉了,但不知道为什么,还是一点点再长,如何解决?谢谢!
(2)把form1 的 datagridview 传给form2的构造函数,这样就可以在form2里面操作form1的控件了
(3)
form 你不需要的话不但要close
而且要释放资源。dispose
2、多窗体间传值,请参考
http://blog.csdn.net/zxliujason/archive/2007/08/04/1725645.aspx
3、属于优化方面的问题
2.可以把form1传给form2
可以在form1中写
例如 form2 f2 = new form2(this);
f2.show() 或者f2.showDialog();
这样就把form1的实例穿了过去,或者你直接把dataGridview传给form2
3.这个问题就要具体分析,看过程序才知道
3)
还是参看一下.NET的dispose模式
.NET本质论里面有详细介绍
windows编程推荐 Chars PetZold 的C#高级编程 非常经典
================================================================================
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;
}
<configuration>
<appSettings><add key="strconn" value="server=.;database=BookShop_06003;uid=sa;pwd=sa"></add>
</appSettings>
tangserver()说的已经很详细了