我想在C/S结构程序中,只用一个SqlConnection,具体应该怎么做 我的程序C/S多窗体,第一个窗体是MDI容器。如果全程序只用一个SqlConnection对象,是不是要用静态SqlConnection,那么具体应该怎么做?这个静态SqlConnection对象是不是第一个窗体对象的成员,还有何时何地初始化、open、close呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不必用静态主窗体的成员主窗体装载时初始化、open主窗体关闭时close 自己做个通讯类,把数据库操作封装进去就好了.一个SqlConnection就可以,不用static的 CS程序这方面要求不是很高,毕竟没有同时多用户使用一个Connection的情况怎样都是可以的,要注意的是,打开与关闭要对应也可以用一个单独的类来封装数据库操作 不必用静态主窗体的成员主窗体装载时初始化、open主窗体关闭时close==========================我不建议用长连接的.最好操作数据库前Open,操作完毕Close比较好 viena:我在主窗体类中加入了SqlConnection成员,可不管我把这个成员定义为public还是private,其它窗体都无法使用。 //我不建议用长连接的.最好操作数据库前Open,操作完毕Close比较好你说的那种情况适用于B/S与三层结构的C/S(数据库在操作封装在中间层)两层的C/S(客户端直连数据库的)用长连接比较好to 楼主:怎么无法使用? 定义为public就可以了通过"主窗体实例对象名.变量名"就可使用 viena:我这样用,系统报错,您帮我看一下哪有问题?主窗体:...public SqlConnection sqlConSmoow;...public formMain(){InitializeComponent();this.sqlConSmoow = new SqlConnection();this.sqlConSmoow.ConnectionString = "workstation id=ZQB;packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=SMOOW";this.sqlConSmoow.Open();}...static void Main() {formMain formmain = new formMain();Application.Run(formmain);}...其它窗体中调用formmain.sqlConSmoow不行 是否没有using System.Data.SqlClient连接打开代码不要放在构造函数里,可以放在比如formMain_Load里面 连接关闭代码放在formMain_Closed里面 参考微软的Enterprise Library. 配置文件里<?xml version="1.0" encoding="utf-8" ?><configuration><appSettings> <add key = "workstation id=ZQB;packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=SMOOW " /></appSettings></configuration>程序里 建议用MS的 sqlhelper加一句public static string ConnectionString = Configuration.ConfigurationManager.AppSettings["Strsqlconn"];要用的时候直接调用方法就可以了 比如返回个datesetDataset ds = new Dataset() ;ds = ExecuteDataset("select * from xxx"); viena:报错信息:找不到类型或命名空间名称“formmain”(是否缺少 using 指令或程序集引用?)。我已经加上using System.Data.SqlClientsunlumail:谢谢,思路开阔了不少,MS的sqlhelper是什么,MSDN里没有 TO:viena(维也纳nn木人 [IQ=50,EQ<0]) ( ) 信誉:100 c/s结构用长连接比较好-----------------------------------------------------------c/s结构的真的用长连接比较好吗?要是数据库是连的远程的呢所有的客户端都连远程的同一个数据库!这样也用长连接比较好?值得怀疑! 为什么要只用一个SqlConnection,我经常的做法是设置一个静态的全局ConnectionString,局部NEW 一个SqlConnection,用时打开,用完就关闭,这样有什么不好吗? 如果真要保证只有一个连接的话 很简单阿,你只要采用signalton模式就可以了比方你再formMain可以这么定义:public class formMain{ private System.Data.SqlConnection sqlConnection = null; public formMain() { InitializeComponent(); OpenSqlConnection(); } public void OpenSqlConnection() // 这里初始化连接对象 { sqlConnection = new System.Data.SqlConnection(); sqlConnection.ConnectionString = "详细信息"; sqlConnection.Open(); } public static System.Data.SqlConnection GetSQLConnection()//这里取得有效连接 { if(sqlConnection == null)//如果没有联接的话,建立连接 { OpenSqlConnection(); } else { return sqlConnection; } }}然后你在窗口的Closed事件中写上关闭连接的事件。你其他窗口就可以同各formMain.GetSQLConnection();这样的形式取得当前的连接了。关于SignalTon模式可以查看其他的书。 SqlHelper MS专门推荐操作SQL数据库的类 SqlHelper MS专门推荐操作SQL数据库的类 楼主不会是在其他窗体重新new出主窗体的对象吧?应该获取当前主窗体的对象的。 做一个动态连接库,把open和close分开两个方法,想开就开,相关就关,不过需要自己管理资源,不能忘了close,否则要出错地 sunlumail 配置文件 <add key = "workstation id=ZQB;packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=SMOOW " /> 把键值写到键名上哒 谢谢各位XDJM,结贴了。感觉自己很多东西还不是太懂,要学的东西很多。 消息队列(MSMQ)触发器调用com组件问题 C#如何根据IP获取物理地址? GDI+绘制图像移动时怎么避免闪烁? 多线程的小问题MVC 如何打开新窗口,关闭旧窗口 关于"界面"实现的问题 菜鸟提问! WebService的启动,暂停,停止 大家看看吧,支持一下.NET的发展 托管C++里,C#的string怎么转成C++的string 写过串口方面程序的大侠们救命呀,用C#写串口方面的程序问题 如何在c#中实现将文本传到lpt1端口?
主窗体的成员
主窗体装载时初始化、open
主窗体关闭时close
怎样都是可以的,要注意的是,打开与关闭要对应
也可以用一个单独的类来封装数据库操作
主窗体的成员
主窗体装载时初始化、open
主窗体关闭时close==========================我不建议用长连接的.最好操作数据库前Open,操作完毕Close比较好
你说的那种情况适用于B/S与三层结构的C/S(数据库在操作封装在中间层)
两层的C/S(客户端直连数据库的)用长连接比较好to 楼主:
怎么无法使用?
主窗体:
...
public SqlConnection sqlConSmoow;
...
public formMain()
{
InitializeComponent();
this.sqlConSmoow = new SqlConnection();
this.sqlConSmoow.ConnectionString = "workstation id=ZQB;packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=SMOOW";
this.sqlConSmoow.Open();
}
...
static void Main()
{
formMain formmain = new formMain();
Application.Run(formmain);
}
...其它窗体中调用formmain.sqlConSmoow不行
using System.Data.SqlClient连接打开代码不要放在构造函数里,可以放在比如
formMain_Load里面
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key = "workstation id=ZQB;packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=SMOOW " /></appSettings>
</configuration>程序里 建议用MS的 sqlhelper加一句
public static string ConnectionString = Configuration.ConfigurationManager.AppSettings["Strsqlconn"];要用的时候直接调用方法就可以了 比如返回个datesetDataset ds = new Dataset() ;
ds = ExecuteDataset("select * from xxx");
c/s结构用长连接比较好
-----------------------------------------------------------
c/s结构的真的用长连接比较好吗?
要是数据库是连的远程的呢
所有的客户端都连远程的同一个数据库!这样也用长连接比较好?
值得怀疑!
我经常的做法是设置一个静态的全局ConnectionString,局部NEW 一个SqlConnection,用时打开,用完就关闭,这样有什么不好吗?
比方你再formMain可以这么定义:
public class formMain
{
private System.Data.SqlConnection sqlConnection = null;
public formMain()
{
InitializeComponent();
OpenSqlConnection();
}
public void OpenSqlConnection() // 这里初始化连接对象
{
sqlConnection = new System.Data.SqlConnection();
sqlConnection.ConnectionString = "详细信息";
sqlConnection.Open();
}
public static System.Data.SqlConnection GetSQLConnection()//这里取得有效连接
{
if(sqlConnection == null)//如果没有联接的话,建立连接
{
OpenSqlConnection();
}
else
{
return sqlConnection;
}
}
}
然后你在窗口的Closed事件中写上关闭连接的事件。
你其他窗口就可以同各formMain.GetSQLConnection();这样的形式取得当前的连接了。关于SignalTon模式可以查看其他的书。
应该获取当前主窗体的对象的。
感觉自己很多东西还不是太懂,要学的东西很多。