1. 程式人生 > >.net core基於mysql的增刪改查

.net core基於mysql的增刪改查

文章目錄

前言

這篇文章的程式已經測試能執行

  • 程式碼在文章的末尾
  • 本程式碼使用了Mysql+MVC+ajax
  • 資料庫語句在專案的sql檔案下

首先我們建立專案
在這裡插入圖片描述
在這裡插入圖片描述
檔案目錄結構為
在這裡插入圖片描述
僅用程式碼的一部分進行講解

1. 資料庫操作

在這裡插入圖片描述
提供一個自用的Mysqlhelper(原來作者已經不知道是哪個了,汗)
mysql和sqlserver程式碼區別

mysql需要在NuGet管理器下載mysql.data
改為sqlserver需要把mysql的my刪除就可以使用了
當然資料庫連線字串在這裡插入程式碼片需要改

由於程式碼量有200多行就直接給github程式碼地址吧

MysqlHelper.cs


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 控制器

接下來就是書寫控制器了
這裡的的控制器對於新手有一個小坑。

  1. 假設我們命名一個控制器為HomeController.cs是對應Views資料夾中的Home資料夾的
    在這個時候程式碼中的
  2.  public IActionResult Index()
     {
     	return View();
     }
    
    對應Home資料夾中的Index.cshtml檔案
    public IActionResult Products()
    {
    	ViewData["Message"] = "Products頁面.";
    	return View();
    }
    
    對應Home資料夾中的Products.cshtml檔案

所以若需要建立一個新的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>