连接池 ConnectionPooling
using System;
using System.Windows.Forms; using System.Configuration; using System.Data.SqlClient; using System.Data.Common; using System.Data.OracleClient; namespace ConnectionPooling
{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e)
{ try { ConnectionLeak(); } catch (SqlException) { //do something cool to recover } MessageBox.Show("Done"); } public void ConnectionLeak()
{ SqlConnectionStringBuilder cnSettings; cnSettings = new SqlConnectionStringBuilder( @"Data Source=.;" + "Database=PUBS;" + "Integrated Security=True;" + "Min Pool Size=3;Max Pool Size=5"); SqlConnection cn = new SqlConnection(cnSettings.ConnectionString); cn.Open(); SqlCommand cmd = cn.CreateCommand(); cmd.CommandText = "raiserror ('Simulate an error in sql', 17,1)"; cmd.ExecuteNonQuery(); //throws the SqlException cn.Close(); //Call connection close, but this code is not reached } private void button2_Click(object sender, EventArgs e) { try { NoConnectionLeak(); } catch (SqlException) { //do something cool to recover } MessageBox.Show("Done"); }
public void NoConnectionLeak()
{ SqlConnectionStringBuilder cnSettings; cnSettings = new SqlConnectionStringBuilder( @"Data Source=.;" + "Database=PUBS;" + "Integrated Security=True;" + "Max Pool Size=5"); using (SqlConnection cn = new SqlConnection(cnSettings.ConnectionString))
{ cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = "raiserror ('Simulate an error in sql', 17,1)"; cmd.ExecuteNonQuery(); //throws the SqlException } cn.Close(); //Call connection close, but this code is not reached } } private void button3_Click(object sender, EventArgs e)
{ string ver = null; SqlConnectionStringBuilder cnSettings; cnSettings = new SqlConnectionStringBuilder( @"Data Source=.;" + "Database=PUBS;" + "Integrated Security=True;" + "Max Pool Size=5"); using (SqlConnection cn = new SqlConnection(cnSettings.ConnectionString))
{ cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = "Select @@Version"; ver = (string)cmd.ExecuteScalar(); } } MessageBox.Show(ver); } private void button4_Click(object sender, EventArgs e) { try { DisplayVersion(); } catch (SqlException xcp) { if (xcp.Number != 1236) throw xcp; //first chance? System.Diagnostics.Debug.WriteLine("Clearing Pools"); SqlConnection.ClearAllPools();//recover DisplayVersion();//retry } } public void DisplayVersion()
{ string ver = null; SqlConnectionStringBuilder cnSettings; cnSettings = new SqlConnectionStringBuilder( @"Data Source=.;" + "Database=PUBS;" + "Integrated Security=True;" + "Max Pool Size=5"); using (SqlConnection cn = new SqlConnection(cnSettings.ConnectionString))
{ cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = "Select @@Version"; ver = (string)cmd.ExecuteScalar(); } } MessageBox.Show(ver); } private void button5_Click(object sender, EventArgs e)
{ SqlConnectionStringBuilder cnSettings; cnSettings = new SqlConnectionStringBuilder( "Data Source=.;" + "Database=FailTest;" + "Integrated Security=True;" + "Max Pool Size=5;" + @"FailOver Partner=.\Partner"); using (SqlConnection cn = new SqlConnection(cnSettings.ConnectionString))
{ cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = string.Format( "Insert into TestTable(Id, Name) Values('{0}','{1}')", Guid.NewGuid(),DateTime.Now.ToLongTimeString()); cmd.ExecuteNonQuery(); } MessageBox.Show("Data entered into server: " + cn.DataSource); } } }
} |


C#.NET
博客统计信息
热门文章
最新评论
友情链接