0. FIrst , Single & Defaultsql
使用这个方法时要当心,First 和 Single 是不一样的。spa
这里,对这个表作下说明:code
若是使用 First , 当没有查到元素时,会报错;若是查到一个元素,会返回这个元素;若是查到多个元素,会返回第一个元素;blog
若是使用 Single , 没有查到元素会报错;查到一个元素,则返回这个元素;查到多个元素,则报错;ip
若是使用 FirstOrDefault , 没有查到元素会返回默认值;若是查到一个元素,则返回这个元素;若是查到多个元素,则返回第一个元素;string
若是使用 SingleOrDefault , 没有查到元素返回默认值;若是查到一个元素,则返回这个元素;若是查到多个元素,则报错;it
1. QueryFirstio
能够用来查询和映射第一个结果class
结果能够被映射到:List
参数
1.1 Query Anonymous
执行一个查询,而且映射第一个结果到一个动态集合
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirst(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
1.2 Query Strongly Typed
执行一个查询,而且映射第一个结果到一个强类型集合
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirst<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
2. QueryFirstOrDefault
执行一个查询,而且映射第一个结果,或者若是没查到元素时,返回一个默认值
结果能够被映射到:
参数
2.1 Query Anonymous
执行一个查询,而且映射第一个结果到一个动态集合,或者若是没查到元素,则返回一个默认值
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirstOrDefault(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
2.2 Query Strongly Typed
执行一个查询,而且映射第一个结果到一个强类型集合,或者若是没查到元素,则返回一个默认值
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
3. QuerySingle
执行查询,而且映射第一个结果,若是查到不止一个元素,则会抛出异常
结果能够映射到:
参数
3.1 Query Anonymous
执行查询,映射第一个结果到一个动态集合,若是查到不止一个元素,抛出异常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingle(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
3.2 Query Strongly Typed
执行查询,而且映射第一个结果到一个强类型集合,若是查到不止一个元素,则抛出异常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingle<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
4. QuerySingleOrDefault
执行查询,而且映射第一个结果,或者若是查询结果为空,则返回默认值;若是查到不止一个元素,则抛出异常
结果映射到:
参数
4.1 Query Anonymous
执行查询,而且映射第一个结果到一个动态集合,或者若是查询结果为空,则返回一个默认值;若是查到不止一个元素,则抛出异常。
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingleOrDefault(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
4.2 Query Strongly Typed
执行查询,而且映射第一个结果到一个强类型集合,或者若是查询结果为空,则返回一个默认值;若是查到不止一个元素,则抛出异常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingleOrDefault<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
5. QueryMultiple
它能够在同一个命令中执行多个查询,而且映射到结果中
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;"; using (var connection = My.ConnectionFactory()) { connection.Open(); using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1})) { var invoice = multi.Read<Invoice>().First(); var invoiceItems = multi.Read<InvoiceItem>().ToList(); } }
参数