我正在使用PHP的PDO层进行项目中的数据访问,我一直在阅读它并发现它对持久数据库连接有很好的内在支持.我想知道何时/是否应该使用它们.我会在CRUD沉重的应用程序中看到性能优势吗?是否存在需要考虑的缺点,可能与安全性有关?
如果对你很重要,我正在使用MySQL 5.x.
SQL Server是否具有用于尝试连接的外部日志文件或内部表,或者是否将此类信息放在Windows事件日志中?
我在SQL#中使用SQL Express数据库作为单元测试项目的一部分.我的数据库位于:
./Databases/MyUnitTestDB.mdf
Run Code Online (Sandbox Code Playgroud)
我想使用相对路径或变量,app.config而不是将我的连接字符串定义为:
AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用|DataDirectory|但我认为这只适用于Web应用程序吗?
我想在应用程序配置文件中控制它,因为在生产中应用程序使用托管的sql数据库.
c# sql connection-string database-connection sql-server-express
为了避免每次查询需要针对MySQL触发时建立新连接的开销,有两种选择:
因此,如果我希望每秒处理数千个请求的多线程服务器应用程序,并且每个线程需要针对数据库触发查询,那么什么是更好的选择?
根据我的理解,使用持久连接,我的应用程序中的所有线程都将尝试使用与数据库相同的持久连接,因为它们都使用相同的连接.因此,它是跨多个应用程序线程共享的一个连接 - 因此请求将很快在数据库端阻塞.
如果我使用连接池机制,我将让所有应用程序线程共享一个连接池.因此阻塞请求的可能性较小.但是,对于连接池,应用程序线程是否应该等待从池中获取连接,或者它是否应该以循环方式在池中的连接上发送请求,并在数据库上进行排队(如果有)?
出于调试目的,我想知道快速测试OLE DB连接字符串的方法.
我找到了这个免费软件,它可以在我的机器上运行,测试成功.
有没有更快的方法,可能从Windows上的命令行?因为大部分时间,客户而不是我都会执行此任务,所以我更喜欢"零安装"方法,这种方法会影响他们的系统.
我知道如果我实例化一个SqlConnection对象,我真的从连接池中获取连接.当我调用Open()时,它将打开连接.如果我在该SqlConnection对象上调用Close()或Dispose()方法,它将返回到连接池.
但是,这并没有真正告诉我它是否真的关闭,或者我是否仍然有一个与数据库的活动连接.
如何强制SqlConnection在网络级别关闭,或者至少告诉它什么时候关闭?
例:
using(SqlConnection conn = new SqlConnection(DBConnString)) {
conn.Open();
SqlCommand cmd = conn.CreateCommand();
...
cmd.ExecuteReader(CommandBehavior.CloseConnection);
...
}
Run Code Online (Sandbox Code Playgroud)
如果连接是TRULY关闭,则第二次和第三次运行也应该是300 ms.但我知道这些运行并没有真正关闭连接(我检查了SQL Server的活动监视器).它不需要额外的200ms来执行身份验证/等.
如何强制连接真正关闭?
思路
参考
MySQL使用时区"GMT + 8"运行,但Tomcat使用"GMT"运行.当我将datetime保存到我的数据库时,一切似乎都没问题,但是当我检查数据库中的datetime值时,我看到了"GMT"值.
此外,当我尝试从数据库中获取值的值时,似乎数据库中的值被视为"GMT + 8",因此Java将值更改为"GMT".
我已经设置了这样的连接URL:
useTimezone=true&serverTimezone=GMT
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在使用我的应用程序部署sql express.我希望该数据库引擎接受远程连接.我知道如何通过启动sql server配置管理器,启用tcp/ip连接,指定端口等来配置该手册.我想知道是否可以从命令行执行相同的操作.
或许我必须在visual studio中创建一个"SQL Server 2008 Server Project".
我在这里发布了相同的问题,但我想在已经安装的sql express实例上做同样的事情.看看这里的问题
我发现这些链接声称做了类似的事情,但我仍然无法使其发挥作用.
1)http://support.microsoft.com/kb/839980
4)http://datazulu.com/blog/post/Enable_sql_server_tcp_via_script.aspx
正如Krzysztof在他的回答中所说,我需要(以及我所知道的其他需要的东西)
1 - 启用TCP/IP

我已经设法在安装传递参数的SQLExpress的新实例时执行此操作 /TCPENABLED=1.当我在这个例子中安装sql express时.sql express的实例将启用TCP/IP
2 - 在防火墙中打开正确的端口
(我已经完成了这个manualy,但我相信我将能够弄清楚如何用c#来做到这一点)到目前为止,我必须使用这个控制台命令来解决问题:
netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT
Run Code Online (Sandbox Code Playgroud)
3 - 修改TCP/IP属性启用IP地址

我一直无法弄清楚如何启用IP,更改端口等.我认为这将是更复杂的解决步骤
4 - 在sql server中启用混合模式身份验证

我已经设法在安装SQL Express时执行此操作,传递参数/SECURITYMODE=SQL参考步骤1的链接.
SQL Server Express要求此身份验证类型接受远程连接.
5 - 更改用户(sa)默认passowrd …
configuration cmd database-connection remote-connection sql-server-express
如果连接到数据库会消耗大量资源,那么为什么要在应用程序中关闭数据库连接,如果必须再次打开它?我是否可以在整个应用程序中全局使用此连接,以便其他类和方法可以重用它?
例如(伪代码):
public class PopulateGridViews()
{
public SqlConnection conn = new SqlConnection(@"Database:DATABASE");
conn.Open();
void PopulateGrid1()
{
SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1");
cmd.Connection = conn;
cmd.ExecuteNonQuery();
cmd.Dispose();
// Populate Grid1
}
void PopulateGrid2()
{
SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2");
cmd.Connection = conn;
cmd.ExecuteNonQuery();
cmd.Dispose();
// Populate Grid2
}
}
Run Code Online (Sandbox Code Playgroud) tomcat连接池有一个名为maxActive的设置和一个名为maxIdle的设置我的问题是.
出于某种原因,文档对我没有意义.根据http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html上的文档,apache dbcp和tomact 7 jdbc-pool上都存在maxActive和maxIdle
maxActive(int)可以同时从此池分配的最大活动连接数.默认值为100
maxIdle(int)始终应保留在池中的最大连接数.默认值为maxActive:定期检查100个空闲连接(如果已启用),并且将释放空闲时间超过minEvictableIdleTimeMillis的连接.(另见testWhileIdle)