C# SQLite数据库+WEB API 编写与测试

本文介绍了如何在C#中使用SQLite数据库进行连接、执行SQL语句以及创建WebAPI服务,包括增删改查操作,并展示了如何通过HTTP请求发送JSON数据.
摘要由CSDN通过智能技术生成

如果说C++是面向对象的编程的话,这阵子摸索学习C#发现C#更是面向对象的编程,它连主函数都写在了类里。

SQLite数据库

以下方法都写在类中,这里我建了一个名为SQLiteHelper的类,并编写了以下代码

1 C#中的SQLite数据库连接和操作的方法

//声明一个连接串 
private string ConnectionString = "";//为什么是private呢 因为不想被随便修改

//对连接串进行初始化
public void InitConnectionString(string path, string password="")
        {
            if (string.IsNullOrEmpty(password)||password.Equals(""))
            {
                this.ConnectionString =  "Data Source=" + path;
            }
            else
            {
                this.ConnectionString =  "Data Source=" + path + ";Password=" + password;
            }
        }

//System.Object(object)是所有类的基类,
//使用params object数组来声明一个方法, 
//它能接受任意数量的object参数;这样就可以让参数的数量任意的,参数的类型任意

//这里进行SQL语句的处理 注意前面加了修饰符private 只能在本类中使用。
//调用的时候直接在类方法中使用函数名+参数就可以了

private  void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Parameters.Clear();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 30;
            if (p != null)
            {
                foreach (object parm in p)
                    cmd.Parameters.AddWithValue(string.Empty, parm);
            }
        }
//执行sql语句,上述命令预处理方法就是如下的方式直接在类里调用
 public  int ExecuteNonQuery(string cmdText, params object[] p)
        {
            using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
            {
                using (SQLiteCommand command = new SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    return command.ExecuteNonQuery();
                }
            }

        }

//除了执行sql语句之外还有读数据的功能如下 返回值是一个SQLiteDataReader类型的要注意及时关闭(close)此变量,否则程序会爆出数据库锁定(database is locked)

 public  SQLiteDataReader ExecuteReaderA(string cmdText)
        {
            SQLiteConnection conn = new SQLiteConnection(ConnectionString);
            if (conn.State != ConnectionState.Open)
                conn.Open();
           SQLiteCommand command = new SQLiteCommand();
           command = conn.CreateCommand();
           command.CommandText = cmdText;
           return command.ExecuteReader();                           
        }

2 C#中如何使用上述方法实现数据库操作

//在主类中声明一个SQLiteHelper 对象
private SQLiteHelper sqliteHelper = new SQLiteHelper();

//对这个对象进行初始化

//获取你的数据库
string dbFile = System.Environment.CurrentDirectory + "\\你的数据库.db"; 

//将数据库初始化给数据库对象
sqliteHelper.InitConnectionString(dbFile);

//增删改操作类似

//增加删除
string insertSql = string.Format("insert into t_data (sampleLotNo,pieceNo,bundleWt,matThick,matNum,weightNo,prodDate,weightTime,createtime) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')","","","","","","","","","");
sqliteHelper.UpdateDataBySQL(insertSql);

//修改
string updateSql = string.Format("update 表名 set token='{0}',createtime='{1}',status='{2}',deadline='{3}'", "字段1", "字段2", "字段3", "字段4");
sqliteHelper.ExecuteNonQuery(updateSql);

//查询
 string selectSql = "select * from 表名";
 SQLiteDataReader reader = sqliteHelper.ExecuteReaderA(selectSql);
 reader.Read();//执行完上述查询表操作后,现在数据流指针在数据的前一个位置,需要挪动到数据的位置
 DateTime time = Convert.ToDateTime(reader["字段名"]);//获取日期类型的数据
 string str =Convert.ToString( reader["字段名"]);//获取字符串类型的数据
 reader.Close();//读数据流需要关闭,不然再次对数据库进行操作会报错 

C# WebAPI

1 编写服务端

创建一个项目

按照如下步骤创建好.ashx新建项,此项即为以后处理客户端请求的网页地址

在处理请求的文件里写入处理程序,以下就是我自己随便写的内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using testWebAPI.Models;
using System.IO;
namespace testWebAPI
{
    /// <summary>
    /// APIResponse 的摘要说明
    /// </summary>
    public class APIResponse : IHttpHandler
    {

        public void ProcessRequest(HttpContext context) //传导体 --外部与应用程序之间传导的导体是HttpContext
        {
            context.Response.ContentType = "text/plain";//HttpContext.Response.ContentType 用来设置HTTP的内容类型
            HttpRequest clientRequest = context.Request;
            string type= clientRequest.Params.Get("type");
            //以下代码获取请求的内容
           byte[] byts = new byte[HttpContext.Current.Request.InputStream.Length];
           HttpContext.Current.Request.InputStream.Read(byts, 0, byts.Length);
            string req = System.Text.Encoding.UTF8.GetString(byts);//编码类型按实际需求
            

            #region 关于返回类型的注释
            /*  "text/plain" 输出内容是没有格式的纯文本
             *  "text/html" 输出内容是HTML格式的文本
             *  "text/xml" 输出内容是xml格式的文本类型
             *  "image/jpeg" 输出内容是图片类型
             *   context.Response.Clear() 输出之前清空输出缓冲区
             *   context.Response.Flush() 把输出缓冲区的内容全部输出到客户端
             */

            //string responseStr = "{\"code\":0,\"data\":{" +
            //    "\"sampleLotNo\":\"test\"," +
            //    "\"pieceNo\":\"2023\"," +
            //    "\"bundleWt\":\"09\"," +
            //    "\"matThick\":\"21\"," +
            //    "\"matNum\":\"zyzb\"," +
            //    "\"weightNo\":\"Web\"," +
            //    "\"prodDate\":\"API\"," +
            //    "\"wightTime\":\"14:34\"}}";

            #endregion

            
                #region 测试获取数据API
                ReturnDataModel returnDataModel = new ReturnDataModel();
                returnDataModel.code = 0;
                DataModel dataModel = new DataModel();
                dataModel.sampleLotNo = "test123456";
                dataModel.pieceNo = "SG11111";
                dataModel.bundleWt = "2556";
                dataModel.matThick = "16";
                dataModel.matNum = "110";
                dataModel.weightNo = "0707";
                dataModel.prodDate = "2023-9-20";
                dataModel.weightTime = "2023-9-22 9:15";
                returnDataModel.data = dataModel;
                string responseJsonStr = JsonConvert.SerializeObject(returnDataModel);
                context.Response.Write(responseJsonStr); //输出一个字符串 此语句用于测试获取数据API
                #endregion
            
           
 #region 测试获取Token API
            ReturnTokenModel returnToken = new ReturnTokenModel();
            returnToken.code = 0;
            returnToken.token = "abc123ShaoGangTokenAPItest";
            string responseTokenStr = JsonConvert.SerializeObject(returnToken);
            //context.Response.Write(responseTokenStr); //输出一个字符串 此语句用于测试获取Token API


                #endregion
            
    }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

右键项目->发布

会有选择发布位置的选项,自己找个本地的位置发布就可以了 ,然后找到IIS配置

搜索框直接搜索IIS

左侧右击网站->点击添加网站

ip地址为本机IP ,注意自己的电脑的IP如果不是固定的,那么每次开机后注意修改网站IP

修改网站IP的方法

要注意配置ASP .NET

根据自己的asp .NET版本安装 我这里是4.0 在下图路径下输入 aspnet_regiis -i命令进行安装

点击右侧

如果出现以下网页界面说明asp .NET 服务未勾选

在控制面板中找到如下图的程序界面(上述有相关寻找内容) ,勾选自己下载好的ASP .NET版本

出现以下界面表示成功

可以尝试用postman测试一下 服务端是否编写成功

2 客户端的相关代码

 public static string HttpGetJsonAPI(string url)
        {
            try
            {
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.Method = "GET";
                webRequest.ContentType = "application/json";
                webRequest.Accept = "application/json";
              //  webRequest.Headers.Add("Authorization", GlobalVariable.NowLoginUser.JwtKey);

                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
                String res = reader.ReadToEnd();
                reader.Close();
                return res.Trim();
            }
            catch (Exception ex)
            {

                return null;
            }

        }
        public static string HttpPostJsonAPI(string uri, string parameters, string token = "")
        {
            try
            {
                byte[] bytes = Encoding.UTF8.GetBytes(parameters);//这里需要指定提交的编码
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
                webRequest.Method = "POST";
                webRequest.ContentType = "application/json";
                webRequest.Accept = "application/json";
                webRequest.Timeout = 2000;
                webRequest.Headers.Add("token", token);

                webRequest.ContentLength = bytes.Length;
                Stream dataStream = webRequest.GetRequestStream();
                dataStream.Write(bytes, 0, bytes.Length);
                dataStream.Close();

                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
                String res = reader.ReadToEnd();
                reader.Close();
                //return res.Trim();
                return res;
            }
            catch (Exception ex)
            {
                LogHelper.SetSystemLog("请求服务异常:" + ex);
                return null;
            }

        }
     //以下两段代码为引用上述内容而按自己的要求编写
        public static TokenModel GetTokenAPI(string url,string token)
        {
            string res = "";
            RuCan ruCan = new RuCan();
            ruCan.type = "getNewToken";
            string jsonstr=JsonHelper.SerializeObject(ruCan);
           
            res = HttpPostJsonAPI(url, jsonstr, token);
            TokenModel tokenModel = new TokenModel();
            if (res == ""||res==null)
            {
                tokenModel.code = -9;
            }
            else
            {
                tokenModel = JsonHelper.DeserializeJsonToObject<TokenModel>(res);
            }
            return tokenModel;
          
        }
        public static ReturnModel GetDataAPI(string url, string token)
        {
            string res;
            RuCan ruCan = new RuCan();
            ruCan.type = "getWeightData";
            string jsonstr = JsonHelper.SerializeObject(ruCan);
            
            res = HttpPostJsonAPI(url, jsonstr, token);
           
            ReturnModel returnModel = new ReturnModel();
            if (res == ""||res == null)
            {
                returnModel.code = -9;
            }
            else
            {
                //returnModel =JsonHelper.DeserializeJsonToObject<ReturnModel>(res);
                returnModel = JsonConvert.DeserializeObject<ReturnModel>(res);
            }
            return returnModel;

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值