dpper 设置一个默认数据库 和 另一个调用数据库
1: private static readonly string connectionString = ""; //System.Configuration.ConfigurationManager.AppSettings[""];
public static IDbConnection sqlServerConnection()
{
string sqlconnectionString = connectionString;
var connection = new SqlConnection(sqlconnectionString);
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
return connection;
}
//动态调用个
public static IDbConnection sqlServerConnection(string connString)
{
string sqlconnectionString = connString;
var connection = new SqlConnection(sqlconnectionString);
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
return connection;
}
2:通过NuGet包下载 Dapper
3: 使用事务主子表添加的方法。
/// <summary>
/// 订单信息同步至供应商
/// </summary>
/// <param name="PohEADER"></param>
/// <returns></returns>
public static bool InsertPOHEADER(PO_HEADER PohEADER)
{
var result = 0;
var userId = 0;
using (var db = DBHlper.sqlServerConnection())
{
using (var tran = db.BeginTransaction())
{
var insertUserActionsql = @"insert into PO_HEADER (SENDER,CREATEDATE)
values(@SENDER,@CREATEDATE); SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS [UserId]";//必须这么写才行 不能用@@identity 方式,dapper不支持
var PohEaderLine = @"INSERT INTO [dbo].[PO_LINE](DOCUMENT_NUM,FID
) VALUES(@DOCUMENT_NUM,@FID)";
try
{
userId = db.ExecuteScalar<int>(insertUserActionsql, PohEADER, tran);
result = db.Execute(PohEaderLine, new
{
FID = userId,
CREATEDATE = DateTime.Now
}, tran);
tran.Commit();
}
catch (SqlException ex)
{
tran.Rollback();
return false;
}
catch (Exception ex)
{
tran.Rollback();
return false;
}
}
}
return result > 0;
}
4:单表添加
```csharp
/// <summary>
/// 批量插入Person数据,返回影响行数
/// </summary>
/// <param name="persons"></param>
/// <returns>影响行数</returns>
public static int Insert(List<Person> persons)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", persons);
}
}
5:删除功能
public static int Delete(Person person)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Execute("delete from Person where id=@ID", person);
}
}
public static int Delete(List<Person> persons)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Execute("delete from Person where id=@ID", persons);
}
}
6:查询功能
/// <summary>
/// 无参查询所有数据
/// </summary>
/// <returns></returns>
public static List<Person> Query()
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Query<Person>("select * from Person").ToList();
}
}
/// <summary>
/// 查询指定数据
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public static Person Query(Person person)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Query<Person>("select * from Person where id=@ID",person).SingleOrDefault();
}
}
7:Dapper的复杂操作查询的In操作
/// <summary>
/// In操作
/// </summary>
public static List<Person> QueryIn()
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
var sql = "select * from Person where id in @ids";
//参数类型是Array的时候,dappper会自动将其转化
return connection.Query<Person>(sql, new { ids = new int[2] { 1, 2 }, }).ToList();
}
}
public static List<Person> QueryIn(int[] ids)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
var sql = "select * from Person where id in @ids";
//参数类型是Array的时候,dappper会自动将其转化
return connection.Query<Person>(sql, new { ids }).ToList();
}
}
8:多表操作
///
/// 多语句操作
///
public static void QueryMultiple()
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
var sql = "select * from Person; select * from Book";
var multiReader = connection.QueryMultiple(sql);
var personList = multiReader.Read<Person>();
var bookList = multiReader.Read<Book>();
multiReader.Dispose();
}
}
9:Join操作
我们是面向对象编程,所以一个对象里面会有许多其他子对象,这个子对象里面又有其自己的子对象,这种关系在数据库里的表示就是外键。
比如我们有一本书book,它有主人person,book是一个对象,主人又是一个对象。
public class BookWithPerson
{
public int ID { get; set; }
public Person Pers { get; set; }
public string BookName { get; set; }
}
我们自然想要一个方法把数据库里复杂的外键关系转成我们需要的对象BookWithPerson,所有我们需要的信息都存在里面,取数据的时候只要找这个对象取数据就行了,比如我们需要一本书的主人的姓名,我们只需要bookWithPerson.Pers.Name。如果是一对多的关系我们用数组,如果是多对多我们加一层mapping。
现在我们想根据书的ID查询书的信息,包括主人信息。那么
public static BookWithPerson QueryJoin(Book book)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
var sql = @"select b.id,b.bookName,p.id,p.name,p.remark
from Person as p
join Book as b
on p.id = b.personId
where b.id = @id;";
var result = connection.Query<BookWithPerson, Person, BookWithPerson>(sql,
(bookWithPerson, person) =>
{
bookWithPerson.Pers = person;
return bookWithPerson;
},
book);
//splitOn: "bookName");
return (BookWithPerson)result;
}
}
中,Query的三个泛型参数分别是委托回调类型1,委托回调类型2,返回类型。形参的三个参数分别是sql语句,map委托,对象参数。所以整句的意思是先根据sql语句查询;同时把查询的person信息赋值给bookWithPerson.Pers,并且返回bookWithPerson;book是对象参数,提供参数绑定的值。
最终整个方法返回BookWithPerson,这样我们所需要的所有信息就有了。