, < : . SQL- , - . - , , , , , , . , , , , , .
, , - , : ( ). , , . , , . , , . , :
public class DataLayer
{
private DbConnection GetConnection()
{
return new SqlConnection("connection string here");
}
}
. , , - , . . , , . , , , , , :
private DataTable Query(string sql)
{
var result = new DataTable();
using (var connection = GetConnection())
using (var command = new SqlCommand(sql, connection)
{
connection.Open();
result.Load(command.ExecuteReader(CommandBehavior.CloseConnection));
}
return result;
}
( //). , . , . , , - . , , .
, , - using. - .Net #. using . . , . -, , ; - . , , . , , try/catch. , IDisposable .Net. IDisposable : , (think: inherit) IDisposable .
using . , :
SqlConnection connection;
try
{
connection = new SqlConnection("connection string here");
SqlCommand command = new SqlCommand("sql query here", connetion);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
}
finally
{
connection.Close();
}
. finally, , . using - , , . , connection.Close(), , , , . sql try/finally , .Close() , , . , .
- : -, . , sql, , . Employee:
public DataTable GetEmployeeData()
{
return Query("SELECT * FROM Employees");
}
, ... , , . -. , : , . , - , , . , "Fred":
public DataTable GetFredsEmployeeData()
{
return Query("SELECT * FROM Employees WHERE Firstname='Fred'");
}
, , . . - :
public DataTable GetEmployeeData(string FirstName)
{
return Query("SELECT * FROM Employees WHERE FirstName='" + FirstName + "'");
}
, . . , , , - ';Drop table employees;-- ( ) FirstName . - , , , , sql.
, Query. , , , , , sql. , . , sql . SqlParameter, / . , , .
, , , , , ( ) #. , , #: /lambdas (: , ). , , . , . , Query(), :
private DataTable Query(string sql, Action<SqlParameterCollection> addParameters)
{
var result = new DataTable();
using (var connection = GetConnection())
using (var command = new SqlCommand(sql, connection)
{
addParameters(command.Parameters);
connection.Open();
result.Load(command.ExecuteReader(CommandBehavior.CloseConnection));
}
return result;
}
Action<SqlParameterCollection>. < >. , , . , ( , SqlParameterCollection ) . GetEmployeeData():
public DataTable GetEmployeeData(string firstName)
{
return Query("SELECT * FROM Employees WHERE FirstName= @Firstname",
p =>
{
p.Add("@FirstName", SqlDbType.VarChar, 50).Value = firstName;
});
}
, Query() firstName, GetEmployeeData(), @FirstName sql. , ADO.Net sql. , , SQL-. , . , , . , , , , () .
(!) . - :
public DataTable GetAllEmployees()
{
return Query("SELECT * FROM Employees", p => {});
}
Query(), , , , .
-, , , . , . , datatable, datareader . , , . , , , , , , , , , , , . , , , .
, : finally . , , .