代码改变世界

vs2010使用sql server

2013-05-21 22:20  youxin  阅读(667)  评论(0编辑  收藏  举报
首先连接数据库,
 SqlConnection conn = new SqlConnection(connStr);
connStr可以写在web.config里面:
<connectionStrings>
  <add name="Sales" 
       connectionString=
         "server=myserver;database=Products;
         uid=<user name>;pwd=<secure password>" />
</connectionStrings>
add:向连接字符串集合添加名称/值对形式的连接字符串。更详细查看msdn
获取connstr;
 string connStr = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString.ToString();

如果有以下错误:

解决办法:添加对System.Configuration.dll文件的引用即可
connStr样例:
 string connStr = "Max Pool Size = 512;Server=2775e154-7df6-4103-821d-a1c500c7e9fe.sqlserver.sequelizer.com;Database=db1775e1547df64103821da1c500c7e9fe;User ID=gtrdapwwbwhzkhms;Password=WskMUo3kYgBLQdvXV27NrUY6VwibwakMHSRbJGPf3JbbCJTgmS27yLvcAnZwe2VX;";
运行一段时间后报错:

时时间已到。超时时间已到 但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用 并且达到了最大池大小。

这是个老问题了!你就查两点:  
  一、看所有open的连接是否都close了。  
  二、如果访问量很大,加上Max   Pool   Size=512这一句,当然这是要以损失系统性能为代价的!  
  这样以后一定可以解决你的问题!


  解决方案一

我 想原因可能是并发操作。DataReader是独占连接的,就是说你的程序可能设计上有问题。比如说最大连接设100,假设有100个人同时使用 DataReader正在读取数据库内容,那么当第101人读取的时候,连接池中的连接已经没有了,就会出现上面的错误。DataReader是独占连接 的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才 会发生。而且你加大并发数量只能暂时缓解问题,如果你加大到200个并发连接,如果有201 人同时操作怎么办?你说了你使用Connection对象的Close()方法,这是不行的,因为Close()方法仅仅是关闭连接,但这个连接没有释 放,还是被这个对象占用,要释放必须使用Connection的Dispose()方法显式释放连接才可以,否则这个对象占用的连接只能等到垃圾收集的情 况下才能被释放。这种情况肯定会出现“超时时间已到”的错误。

解决方法:
         1 修改几个关键页面或访问比较频繁的数据库访问操作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
         2 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
         3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
         4 建议对数据库操作进行大的修改,建立自己的数据库操作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了。

解决方案二

解决方法(*):WEB.config 里面:在数据库连接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一劳永逸。

解决方案三

估计是连接(Connection)对象没有Close。倒是不必Dispose,而DataReader用完后应该关闭,但不关闭也没问题,只是不关闭的话此连接对象就一直不能用,只要你最终关闭了连接对象就不会出问题。   
    
   连接对象在Open后的操作都放在try块中,后面跟一个finally块:conn.Close();

错误:   3154一般是由于恢复数据库备份时指定的数据库名和原有数据库中数据库相同引起的  
  你指定一个不易重复的名字,  
  或者在恢复时指定选项:覆盖现存数据库  
   
   本人在将SQL2000数据库导入SQL2005出错,错误信息如下:

还原 对于 服务器“EDWARD\\TRACY”失败。 (Microsoft.SqlServer.Smo)

有关帮助信息,请单击: http://go.microsoft.com/fwlink?Prod...er&LinkId=20476
转自:http://bbs.csdn.net/topics/310257912