我写了下面的代码。 我为一个查询打开了一次数据库连接 我想执行另一个查询。 我已经写了下面的代码。 但我认为有一个错误 谁能帮帮我?
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
中,以便在不等待垃圾收集器的情况下处理它们。
关于c# - 为每个查询打开和关闭数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14950876/