c# - 为每个查询打开和关闭数据库连接

标签 c# database asp.net

我写了下面的代码。 我为一个查询打开了一次数据库连接 我想执行另一个查询。 我已经写了下面的代码。 但我认为有一个错误 谁能帮帮我?

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())
            {
                myOdbcConnection.Close();
                myOdbcDataReader.Close();
                myOdbcConnection.Open();
                OdbcCommand myOdbcCommand1 = myOdbcConnection.CreateCommand();
                String SQLmax = "SELECT max(call_no) FROM TBL_IThelpdesk";
                myOdbcCommand1.CommandText = SQLmax;

                OdbcDataReader myOdbcDataReader1 = myOdbcCommand1.ExecuteReader();
                while (myOdbcDataReader1.Read() != false)
                {
                    txtcall.Text = myOdbcDataReader1[0].ToString().Trim();
                }
                myOdbcDataReader1.Close();
                myOdbcDataReader.Close();
                myOdbcConnection.Close(); 
            }
        }
    }
    catch (Exception e)
    {
        lblEmpty.Text = e.Message;
        lblEmpty.Visible = true;
    }
}

最佳答案

由于数据库连接使用池,您不必为多个查询维护相同的连接;相反,在需要时打开连接,并尽快关闭它以释放资源。

参见:http://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.80).aspx
另请参阅:C# SQLConnection pooling

请注意,您没有使用 using() { } 模式。鉴于 OdbcConnection 和类似类型实现了 IDisposable,您应该将它们嵌入到 using 中,以便在不等待垃圾收集器的情况下处理它们。

参见:http://msdn.microsoft.com/en-us/library/yh598w02.aspx

关于c# - 为每个查询打开和关闭数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14950876/

相关文章:

python - 在 Python 中存储数据的最佳方式是什么?

c# - 按角色自定义 Sitecore 缓存

c# - Java 比 C# 有什么优势吗?

c# - 为什么这个异步方法上的同步包装器有效?

sql - 我们是否应该将单向的一对多关系分解为 JoinTable

c# - SignalR - 向所有人发送消息,不包括用户的所有连接

c# - 在 asp.net 中从客户端 (Javascript) 刷新 GridView

c# - 将 iostream 输入代码从 C++ 移植到 C#

c# : set timer before loop, 在计时器结束 2 分钟后中断循环

database - 将 Twitter Streaming API 推文原样转储到 Apache Cassandra 进行后期处理