Dapper
17 Jan 2022
Dapper examples using SQL and C#
1. Read With Anonymous Parameters
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
var p = new { LastName = "Doe" };
string sql = "Select * from dbo.Person where LastName = @lastName";
return cnn.Query<PersonModel>(sql, p);
}
2. Map Multiple Objects
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
string sql = @"select pe.*, ph.* from dbo.Person pe
left join dbo.Phone ph
on pe.CellPhoneId = ph.Id;";
var people = cnn.Query<PersonModel, PhoneModel, FullPersonModel>(
sql,
(person, phone) =>
{
person.CellPhone = phone;
return person;
});
}
3. Map Multiple Objects With Parameters
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
var parameters = new { LastName = "Doe" };
string sql = @"select pe.*, ph.* from dbo.Person pe
left join dbo.Phone ph
on pe.CellPhoneId = ph.Id
where pe.LastName = @LastName;";
var people = cnn.Query<PersonModel, PhoneModel, FullPersonModel>(
sql,
(person, phone) =>
{
person.CellPhone = phone;
return person;
},
parameters);
}
4. Multiple Sets
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
string sql = @"select * from dbo.People;
select * from db.Phone;";
List<PersonModel> people = null;
List<PhoneModel> phones = null;
using(var lists = cnn.QueryMultiple(sql)){
people = lists.Read<PersonModel>().ToList();
phones = lists.Read<PhoneModel>().ToList();
}
}
5. Multiple Sets With Parameters
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
string sql = @"select * from dbo.People where LastName = @LastName;
select * from db.Phone where PhoneNumber like '%' + @PartialPhoneNumber + '%';";
List<PersonModel> people = null;
List<PhoneModel> phones = null;
var parameters = new{ LastName = "Doe", PartialPhoneNumber = '1234' };
using(var lists = cnn.QueryMultiple(sql, parameters)){
people = lists.Read<PersonModel>().ToList();
phones = lists.Read<PhoneModel>().ToList();
}
}
6. Output Parameters
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
var parameters = new DynamicParameters();
p.Add("@Id", 0, DbType.Int32, ParameterDirection.Output);
p.Add("@FirstName", "John");
p.Add("@LastName", "Doe");
string sql = $@"insert into db.Person (FirstName, LastName)
values(@FirstName, @LastName);
select @Id = @@IDENTITY;";
cnn.Execute(sql, parameters);
int newId = p.Get<int>("@Id");
}
7. Transactions (Commit/Rollback)
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
var parameters = new DynamicParameters();
p.Add("@FirstName", "John");
p.Add("@LastName", "Doe");
string sql = $@"insert into db.Person (FirstName, LastName)
values(@FirstName, @LastName);";
cnn.Open();
using(var trans = cnn.BeginTransaction())
{
int recordsUpdated = cnn.Execute(sql, parameters, trans);
try
{
// Below statement throws and exception
cnn.Execute("update dbo.Person set Id = 1;", transaction: trans);
trans.Commit();
}
catch(Exception ex)
{
trans.Rollback();
}
}
}
6. Insert DataSet
C#
using(IDbConnection cnn = new SqlConnection(GetConnectionString())
{
var troopers = GetTroppersDataSer(); // Returns a dataset of person
var parameters = new
{
people = troopers.AdTableValuedParameter("TrooperModel")
};
int recordsAffected = cnn.Execute("dbo.spPerson_InsertSet",
parameters,
commandType: CommandType.StoredProcedure);
}