.net core基於mysql的增刪改查
文章目錄
前言
這篇文章的程式已經測試能執行
- 程式碼在文章的末尾
- 本程式碼使用了Mysql+MVC+ajax
- 資料庫語句在專案的sql檔案下
首先我們建立專案
檔案目錄結構為
僅用程式碼的一部分進行講解
1. 資料庫操作
提供一個自用的Mysqlhelper(原來作者已經不知道是哪個了,汗)
mysql和sqlserver程式碼區別
mysql需要在NuGet管理器下載mysql.data
改為sqlserver需要把mysql的my刪除就可以使用了
當然資料庫連線字串在這裡插入程式碼片需要改
由於程式碼量有200多行就直接給github程式碼地址吧
2. Models實體類
在檔案Models下新增ProductModel.cs
namespace Homework.Models
{
public class ProductModel
{
public int id { get; set; }
public string name { get; set; }
public int price { get; set; }
}
}
3. 資料庫具體操作類
在檔案Models下新增ProductRepository.cs
我們的方法是基於mysqlhelper中的GetDataSet方法書寫,用DataSet儲存資料庫的資料
namespace Homework.Models
{
public class ProductRepository
{
public ProductRepository(){}
public DataSet Get (int id)
{
CommandType cmdType = CommandType.Text;
string cmdText = "select * from products where id=?id";
MySqlParameter param = new MySqlParameter("?id", MySqlDbType.Int32);
param.Value = id;
DataSet dataSet = MysqlHelper.GetDataSet(cmdType, cmdText, param);
return dataSet;
}
public DataSet GetByName(string name)
{
CommandType cmdType = CommandType.Text;
string cmdText = "select * from products where name =?name";
MySqlParameter param = new MySqlParameter("?name", MySqlDbType.String);
param.Value = name;
DataSet dataSet = MysqlHelper.GetDataSet(cmdType, cmdText, param);
return dataSet;
}
}
}
同時我們在這裡介紹一個好用的DataTable轉換成Json工具
public class DatasetToJson
{
/// <summary>
/// dataTable轉換成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(System.Data.DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{\"Name\":\"" + dt.TableName + "\",\"Rows");
jsonBuilder.Append("\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++){
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString().Replace("\"", "\\\"")); //對於特殊字元,還應該進行特別的處理。
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0){
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
/// <summary>
/// DataSet轉換成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2Json(System.Data.DataSet ds)
{
StringBuilder json = new StringBuilder();
json.Append("{\"Tables\":");
json.Append("[");
foreach (System.Data.DataTable dt in ds.Tables)
{
json.Append(DataTable2Json(dt));
json.Append(",");
}
json.Remove(json.Length - 1, 1);
json.Append("]");
json.Append("}");
return json.ToString();
}
}
4. Controller 控制器
接下來就是書寫控制器了
這裡的的控制器對於新手有一個小坑。
- 假設我們命名一個控制器為HomeController.cs是對應Views資料夾中的Home資料夾的
在這個時候程式碼中的 -
對應Home資料夾中的Index.cshtml檔案public IActionResult Index() { return View(); }
對應Home資料夾中的Products.cshtml檔案public IActionResult Products() { ViewData["Message"] = "Products頁面."; return View(); }
所以若需要建立一個新的Controller,想要用 return View();就需要建立相對應的資料夾和相對應的檔案,但是在使用get或者post方法時候,Controller是可以接受任何的頁面傳入的。
現在我們在Controllers目錄下建立ProductsController.cs
namespace Homework.Controllers
{
public class ProductsController : Controller
{
ProductRepository productRepository = new ProductRepository();//直接資料庫操作
public IActionResult Index()
{
return View();
}
//GET: /Products/Getid/id
public string Getid(int id)
{
Debug.WriteLine("GetProducts" + id);
DataSet item = productRepository.Get(id);
if (item == null)
return null;
return DatasetToJson.Dataset2Json(item);
}
//POST: /Products/GetProducts
public string GetProducts([FromBody]dynamic Json)
{
ProductModel productModel = new ProductModel
{
name = Json.name
};
Debug.WriteLine("GetProducts" + productModel.name);
DataSet item = productRepository.GetByName(productModel.name);
if (item == null)
return null;
return DatasetToJson.Dataset2Json(item);
}
}
}
其中DatasetToJson.Dataset2Json方法就是把Dataset型別的資料轉換成json給前端,通過return的方式返回
5.Views前端
在Views目錄中的Home目錄建立Products.cshtml,這個檔案對應的就是剛剛所說的HomeController下的Products()方法
@{
ViewData["Title"] = "增刪改查";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<div id="body">
<div class="col-lg-12">
<div>
<br />
<br />
<h2>查詢記錄</h2>
id:<input id="id" type="text" />
<br />
name:<input id="name" type="text" />
<br />
price:<input id="price" type="text" />
<br />
<input id="showItemid" type="button" value="查詢id" />
<input id="showItemname" type="button" value="查詢name" />
</div>
</div>
</div>
js語句部分
記得我們return回來的是一串json的字串,
這裡有兩種方法,我們用的是不新增dataType=json,返回值當成字串處理,否則變成json物件
建立物件儲存資料
//用於儲存使用者輸入資料
var Product = {
create: function () {
id: "";
name: "";
price: "";
return Product;
}
}
把json字串解析並賦值給我們建立的Product 物件
var obj = eval('(' + data + ')'); //格式轉換
$.each(obj.Tables, function (index, table) {
//根據不同的表名,顯示不同的欄位。得到特定表,table = obj.Tables[1]
if (table.Rows.length ==0) {
$("#id").val("不存在此id");
} else {
$.each(table.Rows, function (index, row) {
$("#name").val(row.name);
$("#price").val(row.price);
});
}
});
最後加在一起如下
<script src="~/lib/jquery/dist/jquery.js"></script>
<script>
//用於儲存使用者輸入資料
var Product = {
create: function () {
id: "";
name: "";
price: "";
return Product;
}
}
//先根據name查詢記錄 請求型別:GET 請求url: /Products/name
$("#showItemid").click(function () {
var inputId = $("#id").val();
$("#name").val("");
$("#price").val("");
$.ajax({
url: "/Products/Getid/" + inputId,
type: "GET",
contentType: "application/json; charset=urf-8",
success: function (data) {
var obj = eval('(' + data + ')'); //格式轉換
$.each(obj.Tables, function (index, table) {
//根據不同的表名,顯示不同的欄位。得到特定表,table = obj.Tables[1]
if (table.Rows.length ==0) {
$("#id").val("不存在此id");
} else {
$.each(table.Rows, function (index, row) {
$("#name").val(row.name);
$("#price").val(row.price);
});
}
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("請求失敗,訊息:" + textStatus + " " + errorThrown);
}
});
});
$("#showItemname").click(function () {
var newProduct = Product.create();
newProduct.name = $("#name").val();
$("#id").val("");
$("#price").val("");
$.ajax({
url: "/Products/GetProducts",
type: "POST",
contentType: "application/json; charset=urf-8",
data: JSON.stringify(newProduct),
success: function (data) {
var obj = eval('(' + data + ')'); //格式轉換
$.each(obj.Tables, function (index, table) {
//根據不同的表名,顯示不同的欄位。得到特定表,table = obj.Tables[1]
if (table.Rows.length == 0) {
$("#name").val("不存在此name");
} else {
$.each(table.Rows, function (index, row) {
$("#id").val(row.id);
$("#price").val(row.price);
});
}
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("請求失敗,訊息:" + textStatus + " " + errorThrown);
}
});
});
</script>