前言:因?yàn)橐獙懸粋€(gè)安卓端app,實(shí)現(xiàn)從服務(wù)器中獲取電影數(shù)據(jù),所以需要搭建服務(wù)端代碼,之前學(xué)過C#,所以想用C#實(shí)現(xiàn)服務(wù)器段代碼用于測試,本文使用C#語言,使用asp.net core web api組件搭建服務(wù)器端,并訪問sql server 數(shù)據(jù)庫。
一、安裝Visual studio 2022 社區(qū)版,并安裝ASP.NET和Web開發(fā)組件。
使用Visual studio installer安裝好Visual studio 2022 community版本和asp.net web服務(wù)組件。如下圖。
二、 創(chuàng)建ASP.NET Core Web?API,選擇C#語言。
如下圖所示。
后面一路默認(rèn)配置即可,創(chuàng)建后會有個(gè)實(shí)例代碼,個(gè)人感覺挺有意義,對于初次使用的人很有參考價(jià)值。因?yàn)槌绦蛑杏玫綀D片轉(zhuǎn)base64格式字符串和使用sqlserver數(shù)據(jù)庫,需要下載NuGet程序包,下載方法,解決方案--右鍵--“管理解決方案的NuGet程序包”,下載如下缺少的包,如下圖:
三、連接數(shù)據(jù)庫,并返回查詢結(jié)果
1、首先創(chuàng)建一個(gè)類,保存web端返回的數(shù)據(jù),比如我創(chuàng)建一個(gè)電影類,客戶端查詢電影時(shí),返回電影列表。
namespace MyWebServer
{
// 電影列表使用
public class Film
{
public string? film_name { get; set; }
public string? film_type { get; set; }
public string? film_desc { get; set; }
// base64格式的圖片
public string? film_pic { get; set; }
// 平均分
public string? avg_score { get; set; }
public string? film_video_url { get; set; }
// 上架狀態(tài),待上架、已上架、已下架
public string? film_status { get; set; }
public string? film_up_time { get; set; }
public string? film_down_time { get; set; }
public string? create_time { get; set; }
public string? update_time { get; set; }
public string? create_oper { get; set; }
public string? update_oper { get; set; }
}
}
2、創(chuàng)建controller,提供給客戶端查詢使用。
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using System.Data;
namespace MyWebServer.Controllers
{
[ApiController]
[Route("[controller]")]
public class FilmListController : ControllerBase
{
private readonly ILogger<FilmListController> _logger;
public FilmListController(ILogger<FilmListController> logger)
{
_logger = logger;
}
[HttpPost(Name = "GetFlimList")]
public IEnumerable<Film> GetFlimList()
{
List<Film> filmList = new List<Film>();
try
{
// cinema_db2為數(shù)據(jù)庫名,sa為數(shù)據(jù)庫登錄名,dbpassword為數(shù)據(jù)庫密碼。
// 修改sa用戶密碼和設(shè)置以sql server身份登錄方法見:https://blog.csdn.net/newdriverest/article/details/127120083
// 修改完數(shù)據(jù)庫sa密碼后,記得重啟數(shù)據(jù)庫才能生效。
SqlConnection sqlConnection = new SqlConnection("Data Source=localhost;Initial Catalog=cinema_db2;Encrypt=True;Integrated Security=True;TrustServerCertificate=True;User Id=sa;Password=dbpassword");
sqlConnection.Open();
// 語句可從sql server management sudio查詢查詢語句框中直接復(fù)制過來,去掉/r/n
string sql = "SELECT [film_name],film_type," +
"[film_desc],[film_pic_url],[film_video_url],film_status," +
"[film_up_time],[film_down_time],[create_time],[update_time]," +
"[create_oper],[update_oper]" +
" FROM [cinema_db2].[dbo].[t_film]";
DataSet dataSet = new DataSet();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection);
sqlDataAdapter.Fill(dataSet);
// 遍歷結(jié)果
if (dataSet.Tables.Count > 0)
{
// 行
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
Film tmp = new Film();
// 列
for (int j = 0; j < dataSet.Tables[0].Columns.Count; j++)
{
if (dataSet.Tables[0].Columns[j].ToString().Equals("film_name"))
{
tmp.film_name = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
} else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_type"))
{
tmp.film_type = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
} else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_desc"))
{
tmp.film_desc = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_pic_url"))
{
tmp.film_pic = ImageToBase64(dataSet.Tables[0].Rows[i].ItemArray[j].ToString());
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_video_url"))
{
tmp.film_video_url = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_status"))
{
tmp.film_status = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_up_time"))
{
tmp.film_up_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_down_time"))
{
tmp.film_down_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("create_time"))
{
tmp.create_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("update_time"))
{
tmp.update_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("create_oper"))
{
tmp.create_oper = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
else if (dataSet.Tables[0].Columns[j].ToString().Equals("update_oper"))
{
tmp.update_oper = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();
}
}
filmList.Add(tmp);
}
}
sqlConnection.Close();
// 返回的數(shù)據(jù),客戶端使用相同的類字段接收即可,比如android端使用okhttp3+retrofit2+rxJava,很方便就能獲取到返回的數(shù)據(jù)
return filmList.ToArray();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return filmList.ToArray();
}
}
/// <summary>
/// Image 轉(zhuǎn)成 base64
/// </summary>
/// <param name="fileFullName"></param>
public static string ImageToBase64(string fileFullName)
{
try
{
if (fileFullName != null && !fileFullName.Equals(""))
{
Bitmap bmp = new Bitmap(fileFullName);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length]; ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length); ms.Close();
return Convert.ToBase64String(arr);
}
return "";
}
catch (Exception ex)
{
return "";
}
}
}
}
?3、運(yùn)行web server程序,在瀏覽器中調(diào)試。
先修改訪問服務(wù)器的IP地址為電腦局域網(wǎng)地址,如下圖所示,測試時(shí)最好使用http協(xié)議,這樣客戶端訪問不容易出錯(cuò)。
運(yùn)行程序之后,會打開調(diào)試用的web頁面和一個(gè)命令行窗口,如果web提示有錯(cuò),說明代碼有問題。在瀏覽器測試頁面,可以測試服務(wù)器接口的可用性,點(diǎn)擊如下圖的Try it out按鈕,再點(diǎn)擊Execute按鈕,即可測試接口的返回結(jié)果。文章來源:http://www.zghlxwxcb.cn/news/detail-624769.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-624769.html
到了這里,關(guān)于使用asp.net core web api創(chuàng)建web后臺,并連接和使用Sql Server數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!