问题记录

@Tomato

c#笔记

目录

common use

//预览版
aa??=bb;

postMan (对外参数接口最好为可空类型)

  1. Api参数为(Guid Id)
传入有Id,没有值        -->    后台接收为 Guid.Emtry
传入没有Id              -->    找不到方法报错
  1. Api参数为(Guid? Id)
传入有Id,没有值        -->    后台接收为 null
传入没有Id              -->    后台接收为 null
  1. 数据库为bit,model为bool?时,接口传入参数 123 不能为 “123”
bool?      "1" --> null    "true"  --> true
  1. Api参数为数组时
(Guid?  Id)   -->     直接url, index/Id="1234657"
(List<Guid?>  IDs)     -->      body=["1","2"]    ,type=json。。

4.常见提示、错误

4.1 缺少对公共可见类型或成员“UserController”的XML注释 ----> 解决方案:项目属性 -> 生成 ->禁止显示警告 1591

baseData
1.新建类库

id+ domain+ url 匹配

!licenseFileModel.ListSystem[0].ListWebApi.Exists(x=>x.WebApiUrl=="CC/00")
true
 licenseFileModel.ListSystem[0].ListWebApi.Find(x=>x.WebApiUrl=="CC/00")==null
true
 licenseFileModel.ListSystem[0].ListWebApi.Find(x=>x.WebApiUrl=="CC/DDDD")==null
false
!licenseFileModel.ListSystem[0].ListWebApi.Exists(x=>x.WebApiUrl=="CC/DDDD")
false
licenseFileModel?.ListSystem
null

licenseFileModel?.ListSystem.Find(x => (x.SystemID + string.Empty) == validateSystemID);
null

null.Find(x => (x.SystemID + string.Empty) == validateSystemID);
error CS0023: 运算符“.”无法应用于“<null>”类型的操作数


 null.ToString()  -->  ""
 null.value  会报错    // null??string.Emtry

string aaa = ((EnumQuestionnaireType)1).GetDescription(); 

未能找到路径“D:\tempSy\syTemp.Test\bin\jb.exe”的一部分。

清理单个项目(清理解决方案没用)




AppDomain实现"热插拔"

很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统,这个WinService系统管理的形形色色各种各样的服务,这些服务也是各个"插件式"的类库

就是插件版本dll更新会有不同操作,但是调用的代码却不会改变。版本迭代只需要更新插件dll

AppDomain介绍

热插拔参考

eg:Winform通过 AssemblyLoader --> 加载DLL,反射调用DLL里面的方法

优点:Winform版本变更,只需要更新DLL,Winform版本不需要重装,解决多家企业、学校重装winform麻烦

项目示例: Git -> AppDomainTest




事务

  1. c#事务等级很低,表有主外键关系时,c#事务先锁住主表(update主表or 给主表添加锁),否则高并发的时候,删除子表之后,删除主表的时候容易死锁
  2. 事务里面尽量只做数据库操作,逻辑判断,变量定义什么的最好写在外面
  3. 事务不会自动提交



webClient

SY_Util.DLL

using SY_Util;

// 调用WebApi,参数为单值 
JsonConvert.DeserializeObject<Model>(new WebApiUtil().UploadData("/a/b?c="+1, "POST"));

// 调用WebApi,参数为Json 
new WebApiUtil().UploadJson("/a/b", JsonConvert.SerializeObject(new ConfigInputModel()), "POST");



读取js 、 Json 内容

// json
{
  "type": "object"
}

// js
{
    "name": "111",
    "content": "222",
    "type": "js"
}


// 读取js
string json = System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/testJs.js");
dynamic jsonObj = JsonConvert.DeserializeObject(json) as dynamic;
string type = jsonObj?.type?.ToString() ?? "";

// 读取json (同理)
string json1 = System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/testJson.json");
dynamic jsonObj1 = JsonConvert.DeserializeObject(json) as dynamic;
string type1 = jsonObj1?.type?.ToString() ?? "";

// 序列化取值
//dynamic jsonResult = JsonConvert.DeserializeObject<dynamic>(json);
//dynamic name = jsonResult["type"].Value;



Excel操作

SY_Util.DLL

using SY_Util;

public ActionResult DtGoExcel()
{
    string sql = @"SELECT * FROM Stu";
    DataTable table = ExecSql(Sql);
    //DataTable  -->  文件流
    Stream stream = NopiExcel.StreamFromDataTable(table, ".xls");

    //拷贝流   (一个文件流只能使用一次)
    MemoryStream outPutFileStream = new MemoryStream();
    stream.CopyTo(outPutFileStream);
    outPutFileStream.Position = 0;

    //stream只能拷贝一次
    MemoryStream outPutFileStream1 = new MemoryStream();
    outPutFileStream.CopyTo(outPutFileStream1);
    outPutFileStream1.Position = 0;

    //文件流  -->  DataTable
    DataTable dt = NopiExcel.ExcelToTable(stream, ".xls", 0, 0);

    //Excel文件  -->  DataTable      通过文件路径转为DataTable
    DataTable dt1 = NopiExcel.ExcelToDataTable(AppDomain.CurrentDomain.BaseDirectory + @"upload\in\stuExcel.xls");

    //stream  -->  Excel文件
    NopiExcel.WriteSteamToFile(NopiExcel.StreamToMemoryStream(outPutFileStream), @"C:\Users\sy\Desktop\123.xls");

    //DataTable  -->  model强类型  (excel列头名称需要对应上model字段名)
    List<StuModel> stuList = dt.ToList<StuModel>();

    return File(outPutFileStream1, "application/vnd.ms-excel", "给下载Excel一个默认名称.xls");
}       



导入压缩包图片

HttpPostedFileBase file = Request.Files["file"];
if (file.ContentLength == 0)
{
    return Json(new { errcode = 1, errmsg = "请选择上传文件" });
}

string type = file.ContentType.ToLower();
if (!type.Contains("stream") && !type.Contains("zip"))
{
    return Json(new { errcode = 1, errmsg = "请导入正确文件" });
}

ZipInputStream s = new ZipInputStream(file.InputStream);

ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
    //压缩包底下的每个文件的全名    eg: 文件夹名称/图片名称.jpg
    string fileName = Path.GetFileName(theEntry.Name);
    //只能根据门店和名字修改已存在的数据的图片
    if (fileName != string.Empty)
    {
        string dir = string.Format(@"upload\{0}\{1}\{2}", "sy", "image", DateTime.Now.ToString("yyyyMM"));
        //创建自定义文件夹
        if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + dir))
        {
            Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + dir);
        }
        dir += "\\_test" + fileName;
        //将压缩包中的文件存入本地自定义路径
        FileStream streamWriter = System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + dir);
        int size = 2048;
        byte[] data = new byte[2048];
        while (true)
        {
            size = s.Read(data, 0, data.Length);
            if (size > 0)
            {
                streamWriter.Write(data, 0, size);
            }
            else
            {
                break;
            }
        }
        streamWriter.Close();
    }
}



{“对象必须实现 IConvertible。”}

数据库guid --> list 查询 model string




调试时本地参数指针被优化

错误
无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经
在这里插入图片描述

问题1:可能是本地的调试代码和运行代码版本不一致

解决方案1

清理解决方案,iis重新运行




问题2:可能是本地调试使用的是Release

解决方案
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值