相关疑难解决方法(0)

在C#中使用SqlCommand准备的优点和缺点?

当我正在阅读书籍以学习C#(可能是一些Visual Studio 2005旧书)时,我遇到过SqlCommand.Prepare每次执行SQL调用时都会使用的建议(无论是'a SELECT/ UPDATEINSERTSQL SERVER 2005/2008),我都将参数传递给它.但它真的如此吗?

  1. 应该每次都这样吗?或者有时候?

  2. 它是一个参数传递还是五个或二十个是否重要?

  3. 如果有的话应该提供什么?它是否会引人注目(我一直在SqlCommand.Prepare这里使用并跳过它,从来没有任何问题或明显的差异).

为了问题,这是我使用的常用代码,但这更像是一个普遍的问题.

public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
    const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni,  @varStopaOdniesienia) AS 'Benchmark'";
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
    using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
        sqlQuery.Prepare();
        sqlQuery.Parameters.AddWithValue("@varPortfelID", varPortfelID);
        sqlQuery.Parameters.AddWithValue("@varStopaOdniesienia", varStopaOdniesienia);
        sqlQuery.Parameters.AddWithValue("@data", data);
        sqlQuery.Parameters.AddWithValue("@varBenchmarkPoprzedni", varBenchmarkPoprzedni);
        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult …
Run Code Online (Sandbox Code Playgroud)

c# sql-server performance

35
推荐指数
2
解决办法
2万
查看次数

C#SQLConnection池

任何人都可以向我简要介绍如何在ADO.Net中进行连接池,我需要连接到3个独立的数据库.其中2个在同一服务器中,另一个在另一个服务器中.

更好的代码片段..

c# sql-server ado.net sqlconnection

15
推荐指数
3
解决办法
9618
查看次数

每次迭代相同的SPROC时,执行时间会变慢

通过网络从C#.Net应用程序运行相同的存储过程会随着每次后续执行而逐渐变慢.它似乎比前一次执行花费的时间长两倍(最大值;读取).执行时间逐渐变慢,直到2个场景中的1个发生,此时SPROC的第一次执行再次"快速".

  1. 如果a SqlConnection在所有测试期间打开并保持打开状态,则SPROC会逐渐变慢,直到运行任何其他 SPROC 或查询.
  2. 如果a SqlConnection在每次执行时打开和关闭,SPROC会逐渐变慢,直到至少8分钟过去.

只有少数存储过程才会发生这种情况.一个是SELECT2 的简单查询JOINs,(SPROC 1)另一个是大规模1600+线SPROC(SPROC 2).

对于SPROC 1,执行时间似乎永远不会超过60秒,对于SPROC 2,执行时间似乎不会超过67秒.SPROC 1最初执行时间不到一秒,SPROC 2最初需要7秒.

只有SqlConnection在应用程序中使用SPROC运行SPROC时,才会发生这种情况.一旦使用了2个单独的SqlConnection对象,它们的行为与上述相同,但是是独立的.多次运行SPROC SqlConnection1会逐渐变慢,但第一次运行相同的SPROC时SqlConnection2,它会"快速".当多次运行时,它也会变慢SqlConnection2.

如果应用程序在安装了SQL Server 2008 R2的同一台计算机上运行(运行Windows Server 2008),则不会发生这种情况.执行时间始终一致.

从Management Studio中运行存储过程也不会因每次执行而变慢; 它总是一致的.

清除执行计划缓存(在SQL Server中)对观察到的行为没有影响.

为了创建一个测试应用程序以轻松测试/重现它,需要花费相当多的时间来缩小最初在更大的应用程序中观察到的这个问题.

从我在这里读到的,有一个4到8分钟的超时(SqlConnection.Close()在代码中调用之后),此时它关闭了与数据源的数据库连接.这似乎与我上面提到的方案2一致.

这使我相信它与SqlConnection使用的(以及与数据源的底层数据库连接)有关,因为在我的情况下启用了连接池,但为什么我会观察到这种行为,以及如何解决它?

我们正在使用.Net 2.0 Framework,如果这有任何区别的话.

上面列出了许多细节,如果我需要澄清任何内容,请告诉我.

唯一存在任何相似之处的Stack …

.net c# sql-server performance connection-pooling

7
推荐指数
1
解决办法
1275
查看次数

打开和关闭每个查询的数据库连接

我写了以下代码.我已经为一个查询打开了一次数据库连接,我想执行另一个查询.我写了下面的代码.但我认为有一个错误任何人都可以帮助我吗?

public void check()
{
    try
    {
        OdbcConnection myOdbcConnection = new OdbcConnection(con1);
        OdbcCommand myOdbcCommand = myOdbcConnection.CreateCommand();
        String sSQL = "SELECT * FROM(select tdate from tbl_IThelpdesk order by call_no desc)where ROWNUM = 1"; //last record of the call_no column
        myOdbcCommand.CommandText = sSQL;
        myOdbcConnection.Open();
        OdbcDataReader myOdbcDataReader = myOdbcCommand.ExecuteReader();
        if (!myOdbcDataReader.Read())
        {
            txtDate.Text = DateTime.Now.ToShortDateString();
            string strcallno = DateTime.Now.Year.ToString("d2") + DateTime.Now.Month.ToString("d2") + DateTime.Now.Day.ToString("d2");
            txtcall.Text = "ITHD" + strcallno + "001";
            myOdbcConnection.Close();
            myOdbcDataReader.Close();
        }
        else
        {
            DateTime today = DateTime.Parse(DateTime.Now.ToShortDateString());
            if (myOdbcDataReader[0].ToString() == today.ToString()) …
Run Code Online (Sandbox Code Playgroud)

c# database asp.net

2
推荐指数
1
解决办法
5742
查看次数