1、完成测试

2、api开发
master
bicijinlian 4 years ago
parent cd2d8a6a43
commit d9c6a758c8

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace AccessStudy.Core
{
public interface IStudentIDal
{
List<Student> GetAll();
/// <summary>
/// 按标识查询学生
/// </summary>
Student Get(int studentId);
/// <summary>
/// 按名称查询学生
/// </summary>
Student Get(string studentName);
/// <summary>
/// 添加学生
/// </summary>
bool Add(Student student);
/// <summary>
/// 更新学生
/// </summary>
bool Update(Student student);
/// <summary>
/// 删除学生
/// </summary>
bool Delete(int studentId);
}
}

@ -5,7 +5,7 @@ using System.Text;
namespace AccessStudy.Core
{
/// <summary>
/// 学生
/// 学生实体类
/// </summary>
public class Student
{

@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace AccessStudy.Core
{
public class StudentOdbcDal:IStudentIDal
{
private OdbcUtil dbUtil = new OdbcUtil();
/// <summary>
/// 获取所有学生
/// </summary>
/// <returns></returns>
public List<Student> GetAll()
{
var dataTable = dbUtil.GetDataTable("Student");
List<Student> students = DataTable2Model(dataTable);
return students;
}
/// <summary>
/// 按标识查询学生
/// </summary>
public Student Get(int studentId)
{
var querySql = "select * from Student where Id=?";
var paras = new List<OdbcParameter>()
{
new OdbcParameter("studentId",studentId)
};
var dataTable = dbUtil.GetDataTable(querySql, paras);
return DataTable2Model(dataTable).FirstOrDefault();
}
/// <summary>
/// 按名称查询学生
/// </summary>
public Student Get(string studentName)
{
var querySql = "select * from Student where Name=?";
var paras = new List<OdbcParameter>()
{
new OdbcParameter("studentName",studentName)
};
var dataTable = dbUtil.GetDataTable(querySql, paras);
return DataTable2Model(dataTable).FirstOrDefault();
}
/// <summary>
/// 添加学生
/// </summary>
public bool Add(Student student)
{
var querySql = "INSERT INTO `Student` (Name,Age,Address,School) VALUES(?,?,?,?); ";
var paras = new List<OdbcParameter>()
{
new OdbcParameter("@Name",student.Name),
new OdbcParameter("@Age",student.Age),
new OdbcParameter("@Address",student.Address),
new OdbcParameter("@School",student.School),
};
var effectRow = dbUtil.ExecuteNonQuery(querySql, paras);
return effectRow > 0;
}
/// <summary>
/// 更新学生
/// </summary>
public bool Update(Student student)
{
var querySql = "Update Student Set Name=?,Age=?,Address=?,School=? where Id=?;";
var paras = new List<OdbcParameter>()
{
new OdbcParameter("Name",student.Name),
new OdbcParameter("Age",student.Age),
new OdbcParameter("Address",student.Address),
new OdbcParameter("School",student.School),
new OdbcParameter("Id",student.Id),
};
var effectRow = dbUtil.ExecuteNonQuery(querySql, paras);
return effectRow > 0;
}
/// <summary>
/// 删除学生
/// </summary>
public bool Delete(int studentId)
{
var querySql = "DELETE FROM Student WHERE Id = ?; ";
var paras = new List<OdbcParameter>()
{
new OdbcParameter("Id",studentId),
};
var effectRow = dbUtil.ExecuteNonQuery(querySql, paras);
return effectRow > 0;
}
/// <summary>
/// DataTable转实体列表
/// </summary>
private List<Student> DataTable2Model(DataTable dTable)
{
List<Student> students = new List<Student>();
if (dTable==null)
{
return students;
}
foreach (DataRow row in dTable.Rows)
{
var student = new Student()
{
Id = (int)row["Id"],
Name = row["Name"]?.ToString() ?? "",
Age = (int)row["Age"],
Address = row["Address"]?.ToString() ?? "",
School = row["School"]?.ToString() ?? "",
};
students.Add(student);
}
return students;
}
}
}

@ -8,7 +8,7 @@ using System.Text;
namespace AccessStudy.Core
{
public class StudentDal
public class StudentOledbDal:IStudentIDal
{
private OledbUtil dbUtil = new OledbUtil();

@ -12,10 +12,10 @@ namespace AccessStudy.CoreTest
{
public class StudentDalTest:IDisposable
{
private readonly StudentDal _dal;
private readonly StudentOledbDal _dal;
public StudentDalTest()
{
_dal = new StudentDal();
_dal = new StudentOledbDal();
}
[Fact]

@ -2,7 +2,18 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.6.3" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.6.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AccessStudy.Core\AccessStudy.Core.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AccessStudy.WebApi
{
public class ResultBase
{
public int Code { get; set; }
public string Message { get; set; }
public dynamic Data { get; set; }
}
}

@ -0,0 +1,176 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using AccessStudy.Core;
namespace AccessStudy.WebApi.Controllers
{
/// <summary>
/// 学生管理接口
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]
public class StudentController : ControllerBase
{
private readonly ILogger<StudentController> _logger;
private readonly IStudentIDal _studentDal;
/// <summary>
/// 构造
/// </summary>
public StudentController(ILogger<StudentController> logger, IStudentIDal studentIDal)
{
_logger = logger;
_studentDal = studentIDal;
}
/// <summary>
/// 获取所有学生
/// </summary>
/// <returns></returns>
[HttpGet]
public ResultBase GetAll()
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = _studentDal.GetAll()
};
return result;
}
/// <summary>
/// 按标识获取学生
/// </summary>
/// <param name="studentId">标识号</param>
/// <returns></returns>
[HttpGet]
public ResultBase GetById(int studentId)
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = _studentDal.Get(studentId)
};
return result;
}
/// <summary>
/// 按姓名获取学生
/// </summary>
/// <param name="studentName">姓名</param>
/// <remarks>
/// 请求例子:
/// GET /api/Student/GetByName?studentName=王高峰
/// </remarks>
/// <returns></returns>
[HttpGet]
public ResultBase GetByName(string studentName)
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = _studentDal.Get(studentName)
};
return result;
}
/// <summary>
/// 添加学生
/// </summary>
/// <param name="student">学生信息</param>
/// <returns></returns>
[HttpPost]
public ResultBase Add(Student student)
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = null
};
if (_studentDal.Add(student))
{
result.Message = "添加成功";
result.Data = true;
}
else
{
result.Message = "添加失败";
result.Data = false;
}
return result;
}
/// <summary>
/// 修改学生
/// </summary>
/// <param name="student">修改学生信息</param>
/// <returns></returns>
[HttpPost]
public ResultBase Update(Student student)
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = null
};
if (_studentDal.Update(student))
{
result.Message = "更新成功";
result.Data = true;
}
else
{
result.Message = "更新失败";
result.Data = false;
}
return result;
}
/// <summary>
/// 删除学生
/// </summary>
/// <param name="studentId">学生标识</param>
/// <returns></returns>
[HttpPost]
public ResultBase Delete(int studentId)
{
var result = new ResultBase()
{
Code = 0,
Message = "",
Data = null
};
if (_studentDal.Delete(studentId))
{
result.Message = "删除成功";
result.Data = true;
}
else
{
result.Message = "删除失败";
result.Data = false;
}
return result;
}
}
}

@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AccessStudy.WebApi.Controllers
{
/// <summary>
/// 示例控制器
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
/// <summary>
/// 默认请求
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Get()
{
var result = new { Code=0,Message="请求成功"};
return new JsonResult(result);
}
}
}

@ -1,40 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AccessStudy.WebApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
}

@ -20,7 +20,7 @@
"AccessStudy.WebApi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "weatherforecast",
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"

@ -11,6 +11,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AccessStudy.Core;
using System.Reflection;
namespace AccessStudy.WebApi
{
public class Startup
@ -26,6 +29,25 @@ namespace AccessStudy.WebApi
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
//实现Oledb和ODBC的切换
//services.AddScoped<IStudentIDal,StudentOdbcDal>();
services.AddScoped<IStudentIDal,StudentOledbDal>();
services.AddSwaggerGen(option =>
{
option.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo() { Title = "API", Version = "v1" });
// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile);
option.IncludeXmlComments(xmlPath);
});
//services.ConfigureSwaggerGen(option =>
//{
//});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@ -36,6 +58,12 @@ namespace AccessStudy.WebApi
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUI(option =>
{
option.SwaggerEndpoint("/swagger/v1/swagger.json", "AccessStudy WebApi v1");
});
app.UseRouting();
app.UseAuthorization();

@ -1,15 +0,0 @@
using System;
namespace AccessStudy.WebApi
{
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string Summary { get; set; }
}
}
Loading…
Cancel
Save