Обновление : Дох, неправильно прочитал исходный код, проблема в том, что код находится в области класса, а не внутри метода:
public class SqlConnectionDemo
{
// NEED METHOD DECLARATION HERE
public void SomeMethod()
{
SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");
SqlDataReader rdr = null;
try
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from Customers", conn);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
}
finally
{
// close the reader
if (rdr != null)
{
rdr.Close();
}
// 5. Close the connection
if (conn != null)
{
conn.Close();
}
}
}
}
Обновление Кстати, если все, что вам нужно, это попытаться / наконец убедиться, что вы закрыли / утилизировали соединение и считыватель и позволили исключению всплыть, используйте вместо этого блок using
. Блок using
будет вызывать Dispose()
для переменной, указанной в нем, независимо от того, выходит ли он из области видимости нормально или выбрасывается исключение, он также является нулевым. Это просто удобное сокращение для блоков try/finally
для всего, что реализует IDisposable
:
public void SomeMethod()
{
using (var conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"))
{
conn.Open();
using (var cmd = new SqlCommand("select * from Customers", conn))
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
}
}
}
Обновление : в соответствии с вашим вопросом, если у вас есть результирующее текстовое поле с именем _resultsText
, которое было определено как многострочное, вы можете сделать:
public void SomeMethod()
{
using (var conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"))
{
conn.Open();
using (var cmd = new SqlCommand("select * from Customers", conn))
using (var rdr = cmd.ExecuteReader())
{
var builder = new StringBuilder();
while (rdr.Read())
{
builder.Append(rdr[0]).Append(Environment.NewLine);
}
// assuming you are on the main thread here, if you're calling
// from a parallel thread you spawned, you'd need to check if
// invoke required, lot's of SO answers on how-to, etc if so.
_resultsText.Text = builder.ToString();
}
}
}