工作琐碎笔记

1.VSS正常连接,VS打开工程提示连接不上,需要输入新连接地址
工具-选项-源代码管理,设置【当前源代码管理插件】为Microsoft VisualSourceSafe而不是Microsoft Visual SourceSafe(Internet)
参考链接:VS中链接不上VSS需要输入address的解决方法


2.从VSS上导出的工程编译时提示对路径访问被拒绝
从VSS上同时导出了bin和obj目录,导出时默认是只读的,所以只需删除掉VSS上的bin和obj目录,再编译即可
参考链接:VS配合VSS时,编译报错:未能向文件“…csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝。


3.通过WebService获取的数据库的varbinary二进制数据,一般会进行64位编码转成字符串
64位字符串=>二进制 string s = Convert.ToBase64String(byte[]
bytes); 二进制=>64位字符串 byte[] bytes = Convert.FromBase64String(string s);
64位字符串=>普通字符串的话,就需要先转成二进制,再转成普通字符串

///给winform图片控件赋值
if (dr["tmvs_verico"] != DBNull.Value)
{
   byte[] imagedata = Convert.FromBase64String(dr["tmvs_verico"].ToString());
   MemoryStream myStream = new MemoryStream();
   foreach (byte a in imagedata)
   {
       myStream.WriteByte(a);
   }
   Image myImage = Image.FromStream(myStream);
   ico.Image = myImage;
   myStream.Close();
}

4.串口接收扫码枪数据时偶尔会截断
添加Thread.Sleep(20);不得已而为之,数据传输并不是每次都是完整的,但接收的数据没有协议,没有数据头、校验位等,只能延迟等待接收完毕


5.多线程写日志文件问题
可以单独开启一个写日志的线程,日志类中维护全局变量队列queue,按先进先出的规律写入队列并写到日志文件中,具体可参考RsCommon中的LogHelperMt


6.async和await
async标记方法为异步方法,用await标记耗时操作,主线程执行到await时会立即返回,以非阻塞形式继续执行主线程逻辑,当await标记的操作完成时会继续执行async标记的方法(有点类似回调函数)


7.SQL 嵌套事务


8.Invoke和BeginInvoke
Invoke和BeginInvoke都是封送一个委托方法给界面线程的消息队列。
Invoke是同步方法,即在方法执行完毕前不会返回,调用者线程将被阻塞。 BeginInvoke是异步方法。


9.WebService一直30秒超时问题
修改了IIS网站-高级设置-连接限制-连接超时
修改了WebService配置文件<httpRuntime executionTimeout="600000" /><compilation debug="false">
修改了请求时的超时限制req.Timeout = Timeout.Infinite;
最后才发现数据库连接超时设置才是最关键的cmd.CommandTimeout = 300;


10.ManualResetEvent信号量
实例化后可调用set()恢复所有被阻塞线程,WaitOne()则是阻塞线程
参考链接:C# ManualResetEvent和AutoResetEvent 使用笔记


11.拆箱装箱
拆箱:引用类型=>值类型
装箱:值类型=>引用类型
注意:int.ToString()并不是一个装箱过程,因为Int32重写了ToString方法


12.字节取高四位和低四位

byte bb = 28;
//高四位
var high = (byte)((bb & 0xf0) >> 4);
//低四位
var low = (byte) (bb & 0x0f);

13.base和this关键字,where关键字
构造函数中声明base是调用父级构造函数,this是调用当前资源对象的构造函数
where T : struct 这表明T必须是一个值类型,像是int,decimal这样的
where T : class这表明T必须是一个引用类型,像是自定义的类、接口、委托等
where T : new()这表明T必须有无参构造函数,且如果有多个where约束,new()放在最后面
where T : [base class name]这表明T必须是base class类获其派生类 where T : [interface name] 这表明T必须实现了相应的接口


14.Entity Framework分页

/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="T">要操作的数据类型</typeparam>
/// <param name="whereLambda">Where条件语句</param>
/// <param name="orderLambda">按什么条件排序</param>
/// <param name="pageSize">每页多少条数据</param>
/// <param name="pageIndex">要查询第几页</param>
/// <returns>返回一个泛型集合</returns>
static List<T> GetPageList<T>(Func<T, bool> whereLambda, Func<T, object> orderLambda, int pageSize,int pageIndex) where T : class
{
    TESTEntities context = new TESTEntities();
    var list = context.Set<T>().Where(whereLambda).OrderBy(orderLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
    return list.ToList();
}

//应用
using (var context = new TESTEntities())
{
    var bb = GetPageList<test2>(t => t.AreaCode > 0, t => t.AreaCode, 3, 3);
}

15.SQL 链接服务器和同义词
链接服务器:【服务器对象】=>【新建】=>【链接服务器】,这样可以访问远程数据库的表数据。
同义词:基于上面访问的时候需要写明=>[服务器名].[数据库].[表所有者].[表名],太麻烦,所以使用同义词可以代替这么长的前缀。


16.SQL 连接池
连接池:避免反复创建新的数据库连接。
默认是开启连接池的,关闭则在连接字符串中设置pooling=false;


17.安装Windows Service时提示Set Service Login
如果需要登录,需要以域的方式登录,".\login"。
如果不需要,serviceProcessInstaller的Account取消设置为User。


18.多线程cpu占用高问题
while循环中,暂无处理时可选线程阻塞:Thread.Sleep(10);可有效减少cpu占用率


19.开发winform程序、webapi等
异常使用全局来捕捉,并进行写日志


20.程序安装服务,启动出现无法启动计算机“.”上的服务的问题
程序目录在C盘,权限不够,添加everyone权限后解决


21.Windows Server 2003 发布WebApi问题
1)只支持dotnet framework4.0,vs2017只能创建4.5的webapi项目。故安装vs2010新建4.0的webapi。
2)4.0中没有IHttpActionResult,直接返回类即可
3)发布后提示404,在dotnet framework4.0路径下cmd执行aspnet_regiis -i,然后在iis中的web服务扩展允许 aspnet v4.0.30319


22.jquery的$("#id").data("type")偶尔和当前页面实际值不同

使用$("#id").attr(“data-type”)代替


23.SQL执行存储过程很快,.Net中执行很慢

解决:重新编译存储过程;创建时添加WITH RECOMPILE
原因:引用的表数据或结构发生大的变化(引用的测试表发生了大变化)时会影响到原先预编译的执行计划,从而影响执行时间


24.SQL,使用频率高时,尽量避免建立临时表

可以添加条件判断,存在时才建立临时表


25.WebApi提供下载接口时不能自行关闭文件流

原因是WebApi宿主要用到它


26.SQL APPLY 和 JOIN

Apply:运算符,可连接函数进行计算结果,Cross类似left,Outer类似right
Join:连接表


27.Windows Server 2012 发布WebApi问题

安装iis时添加功能(包含3.5和4.5)
安装提示没有源文件,源文件下载


28.SQL关于IN和EXISTS

如果子查询结果少,主查询多,用IN
如果子查询结果多,主查询少,用EXISTS
NOT EXISTS一定比NOT IN快,因为NOT IN全表扫描,无法使用索引


29.IIS跨域设置URL重写

域名不同导致前端请求失败,设置URL重写可解决
参考链接
先安装Application Request Routing,后安装URL重写模块,再进行规则配置,模式【^(.?)/?api/(.)$】,重写【http://localhost:8002/{R:0} 】


30.C# 随机数

Random实际是伪随机,可用RNGCryptoServiceProvider
参考链接

var randomBytes = new byte[4];
var rngServiceProvider = new RNGCryptoServiceProvider();
rngServiceProvider.GetBytes(randomBytes);
var result = Math.Abs(BitConverter.ToInt32(randomBytes, 0)) % 5 + 1;

31.SQL 查询缺少字段的表
SELECT * FROM sys.tables WHERE OBJECT_ID NOT IN (
SELECT T.object_id
FROM sys.tables T INNER JOIN sys.columns C
ON T.object_id=C.object_id
WHERE C.name = '字段'
)

32.IIS部署网站报错:Could not load type ‘System.ServiceModel.Activation.HttpModule’

错误原因是因为先安装了.Net Framework4.5再安装IIS的.Net Framework3.5导致
解决方法:
1.删除IIS模块中的ServiceModel
2.删除IIS处理程序映射中的svc-Integrated
参考链接:点我


33.MVC网站,前端ajax阻塞

错误原因是因为Session会话阻塞
解决方法:控制器添加特性=>SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)
参考链接:点我


34.winform窗体间委托
//两个窗体之间的事件委托
//父窗体:
ChildForm cForm = new ChildForm();
cForm.ChildEvent += New ProgressForm.ChildEventHandler(FatherMethod);
cForm.Show();
//子窗体:
Public delegate void ChildEventHandler(string arg);
Public event ChildEventHandler ChildEvent;
ChildEvent(123);

35.使用FileZillaServer安装后开启端口失败【Failed to create listen socket on port for IPv6】

一开始以为是端口占用,使用多个后还是报错。
后想想IPv4没有问题,只有IPv6,可能是windows2003没有安装IPv6协议。
网络属性=》常规【Microsoft网络客户端】安装=》协议【添加】=》Microsoft TCP/IP 版本6


36.使用代码打印时注意OS的默认打印机是什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值