.Net Core webapi与SQLserver 的相遇
作者:秋名
撰写时间:2020 年 8 月 19 日
技术:使用.Net Core 封装webapi
//选择API,选择对应的版本号
右键 添加控制器-(Api控制器-空)
1、新建控制器,配置api路由
//Route:路由
//api/控制器/方法名
//api/Products/Getproducts 访问的路径
[EnableCors("any")]//调用跨越的政策
[Route("api/[controller]/[action]")]
[ApiController]
public class ProductsController : ControllerBase
{
public List<Products> Getproducts() {
List<Products> productList = Products.GetProductList();
return productList;
}
}
2、打开配置文件appsettings.json,配置连接SQLserver的账号和密码。
{
"Constr": "Data Source=127.0.0.1;Database=TestBase;Uid=sa;Pwd=123",//添加数据库的连接地址
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
3、Startup:类配置服务和应用程序的请求管道
public void ConfigureServices(IServiceCollection services)
{
var conSer=Configuration.GetSection("Constr");//连接配置文件appsettings.json
SqlHelper.Constr = conSer.Value;//获取到连接路径,将字段赋值给SqlHelper控制器的静态字段
services.AddControllers();
}
4、添加一个公用的文件夹Common,添加类库SqlHelper.cs(连接数据库)
public class SqlHelper
{
//satic静态,一旦赋值,会一直保留这个值。不会被回收。
public static string Constr { get; set; }
public static DataTable ExecuteTable(string cmdText) {
using (SqlConnection con = new SqlConnection(Constr))
{
con.Open();
// SqlCommand对象:Ado.Net中执行数据库命令的对象。
SqlCommand cmd = new SqlCommand(cmdText, con);
//1、表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。
//2、在SqlDataAdapter和DataSet之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)调用后,两个对象之间就没有连接了。
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds.Tables[0];
}
}
}
5、新增Models文件夹,新建类Products.cs(采用充血模型)
6、使用ORM(Object RelationMapping)对象关系映射,ORM模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
public class Products
{
//建立属性字段(EF:简称实体模型)
public int Id { get; set; }
public string productName { get; set; }
public string productImageUrl { get; set; }
public string productDetaillmagUrl { get; set; }
public decimal Price { get; set; }
public static List<Products> GetProductList() {
DataTable dt = SqlHelper.ExecuteTable("SELECT * FROM products");
List<Products> products = new List<Products>();
for (int i = 0; i < dt.Rows.Count; i++)
{
products.Add(ToModel(dt.Rows[i]));
}
return products;
}
private static Products ToModel(DataRow dr) {
Products product = new Products();
product.Id = (int)dr["Id"];
product.productName = dr["productName"].ToString();
product.productImageUrl = dr["productImageUrl"].ToString();
product.productDetaillmagUrl = dr["productDetaillmagUrl"].ToString();
product.Price = (decimal)dr["Price"];
return product;
}
}
使用PostMan检测请求是否成功,有数据成功返回数据库数据