我刚开始.net 开发的那几年,差不多每天坚持搜集实用的技巧和代码片断。几年下来也搜集了上千条。现在选出一些不太容易找或者自己有较多体会的,写在这里。内容太多,分两次发。

1.上传文件超过设置允许的最大值时,显示自定义出错页面。

这个帖子说得最好:https://stackoverflow.com/questions/2759193/display-custom-error-page-when-file-upload-exceeds-allowed-size-in-asp-net-mvc

自己的一点心得:这个帖子里引用了这个链接:https://www.thecodingforums.com/threads/how-to-handle-maximum-request-length-exceeded-exception.97027/ 实践发现,还需要在Application_Error里压制相应的exception。

在php里,不存在这个问题。如果上传文件超过设置允许的最大值,php不会象asp.net 那样抛出一个让人不知道发生什么的空页面。

2.检查当前用户是否属于某个数据库角色

ALTER PROCEDURE [dbo].[ssp_IsDbRole]
@RoleName VARCHAR(50)
AS DECLARE @IsMember BIT
, @CurrentUser VARCHAR(60)
, @UserLogin VARCHAR(60)
, @SIndex INT CREATE TABLE #tmp_Roles
(
RoleName VARCHAR(60)
, RoleID SMALLINT
, IsAppRole INT
) INSERT INTO #tmp_Roles
EXEC sp_helprole IF NOT EXISTS
(
SELECT NULL
FROM #tmp_Roles
WHERE RoleName = @RoleName
)
SET @IsMember = 0
ELSE
BEGIN
SET @CurrentUser = SYSTEM_USER
SET @SIndex = CHARINDEX('\', @CurrentUser)
IF @SIndex > 0
SET @UserLogin = SUBSTRING(@CurrentUser, @SIndex + 1, LEN(@CurrentUser) - @SIndex)
ELSE
SET @UserLogin = @CurrentUser CREATE TABLE #tmp_Members
(
DBRole VARCHAR(60)
, MemberName VARCHAR(60)
, MemberSID VARBINARY(85)
)
INSERT INTO #tmp_Members EXEC sp_helprolemember @RoleName
IF EXISTS
(
SELECT MemberSID
FROM #tmp_Members
WHERE MemberName IN (@CurrentUser, @UserLogin)
)
SET @IsMember = 1
ELSE
SET @IsMember = 0
DROP TABLE #tmp_Members
END
DROP TABLE #tmp_Roles
SELECT @IsMember AS IsMember

3. sql server 2005和2008 报表服务有不同的缺省web服务地址,一个检测到底是2005还是2008的方法是:向这个地址

http://<服务器地址>:<端口号>/reportserver/reportservice.asmx 发一个http请求,然后看返回的文本,如以<html开头就是2008,如以<?xml开始,就是2005。

4. 在报表服务器上创建新目录

string reportPath = "/foo/bar";
bool exists = true;
string parentPath = "/";
string[] reportPaths = reportPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
if (reportPaths.Length > )
{ SearchCondition[] conditions = new SearchCondition[];
SearchCondition condition = new SearchCondition();
condition.Condition = ConditionEnum.Equals;
condition.ConditionSpecified = true;
condition.Name = "Name"; for (int i = ; i < reportPaths.Length; i++)
{
condition.Value = reportPaths[i];
conditions[] = condition;
var result = myreportingServiceWebServiceClient.FindItems(parentPath, BooleanOperatorEnum.And, conditions);
if (result == null || result.Length == )
{
exists = false;
myreportingServiceWebServiceClient.CreateFolder(reportPaths[i], parentPath, null);
}
if (parentPath != "/")
{
parentPath += "/";
}
parentPath += reportPaths[i];
}
}

5. 以下sql

select abc from dbo.a left join dbo.b where b.t = 'a'

如果b.t是null就没有任何返回结果

应改成

select abc from dbo.a left join dbo.b on b.t = 'a'

6. asp.net应用,如果服务器和客户端使用不同的地理区域设置,可能会有不同的日期格式,在解析时要注意这个问题,一种方法是:

                DateTime dt = DateTime.MinValue;
string strDate = Request["Date"];
System.Globalization.CultureInfo[] cultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);
foreach (var item in cultures)
{
if (DateTime.TryParse(strDate, item, System.Globalization.DateTimeStyles.None, out dt))
{//合法的日期
......
break;
}
}

7. asp.net应用里,检查Cache是否过期,最好是if (Cache["mykey"] == null || ((MyObj)Cache["mykey"]).MyProperty == null)

而不仅仅是if (Cache["mykey"] == null)

8. 通过连接服务器(linked server)执行存储过程时,触发了错误:

Server 'foo' is not configured for rpc.

如果打开Sql Server Management Studio,linker server properties -- server options -- RPC and RPC out,企图将值改成true,可能会触发错误:

Ad hoc updates to system catalogs are not allowed.

正确做法是执行:

exec sp_serveroption @server='foo', @optname='rpc', @optvalue='true'
exec sp_serveroption @server='foo', @optname='rpc out', @optvalue='true'

9. javascript:列出对象的所有属性名称和值:

function dumpProps(obj, parent) {
for (var i in obj) {
if (parent) {
var msg = parent + "." + i + "\n" + obj[i];
}
else {
var msg = i + "\n" + obj[i];
}
alert(msg);
if (typeof obj[i] === "object") {
if (parent) {
dumpProps(obj[i], parent + "." + i);
}
else {
dumpProps(obj[i], i);
}
}
} }

10. sql server: 在计算列(computed column)上建索引要小心,可能会触发错误:

INSERT failed because the following SET options have incorrect settings: 'ANSI_NULLS'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.

解决办法是正确设置这些标志值:

SET NUMERIC_ROUNDABORT OFF
GO
SET ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL ,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON
GO

11. 使用windows的Task Scheduler,运行一个批处理文件(.bat)将文件拷贝到一个网络盘:

copy c:\temp\a.txt  q:\abc\

这不会成功,得用完整地址:

copy c:\temp\a.txt \\<域名>\\<机器名>\\abc

尽管这个路径已经映射为q:,可是Task Scheduler好像不知道这回事。

另一个方法就是在上面的copy命令前,先执行一条net use映射命令。

C#,js和sql实用技巧选1的更多相关文章

  1. C#,js和sql实用技巧选2

    1.为什么"foo".Equals()不是好做法?因为当正确的写法是"foo".Equals(obj.value),却写成了"foo".Eq ...

  2. js 处理URL实用技巧

    escape().encodeURI().encodeURIComponent()三种方法都能对一些影响URL完整性的特殊字符进行过滤.     但后两者是将字符串转换为UTF-8的方式来传输,解决了 ...

  3. SQL实用技巧:如何将表中某一列的部分数据合并到一行中

    select *,stuff(select ‘,’ + fieldname from table1 for xml path(”)),1,1,”)  as  field from table2 for ...

  4. SQL实用技巧:如何分割字符串

    create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as beg ...

  5. SQL实用技巧:如何判断一个值是否为数字的方法

    检测是不是数字型的数据, 两种方法 1. ISNUMERIC ( expression ) 2. PATINDEX ( ‘%pattern%‘ , expression ) 1. ISNUMERIC  ...

  6. js基础进阶--编码实用技巧(二)

    我的个人博客:http://www.xiaolongwu.cn 接上篇文章 js编码的实用技巧(一) 5.合理利用||运算符 使用||可以作为参数之外的默认值,当第一个参数返回值为false时,那么第 ...

  7. js基础进阶--编的实用技巧(一)

    我的个人博客:http://www.xiaolongwu.cn 在平时的开发中,编码技巧很重要,会让你少写很多代码,起到事倍功半的效果. 下面总结几种简单的技巧,大家共同学习一下 1. 利用+.-./ ...

  8. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

    目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

  9. 【JavaScript实用技巧(二)】Js操作DOM(由问题引发的文章改版,新人大佬都可)

    [JavaScript实用技巧(二)]Js操作DOM(由问题引发的文章改版,新人大佬都可!) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人 ...

随机推荐

  1. selenium自动爬取网易易盾的验证码

    我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...

  2. springboot整合Druid(德鲁伊)配置多数据源数据库连接池

    pom.xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...

  3. 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?

    一般步骤:登陆后点邮箱名——安全设置——开通两步验证,用二次验证码微信小程序绑定即可 具体步骤见链接  坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA? 二次验证码小程序于谷歌身份验证 ...

  4. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...

  5. CODING DevOps + Nginx-ingress 实现自动化灰度发布

    作者:王炜,CODING DevOps 后端开发工程师,拥有多年研发经验,云原生.DevOps.Kubernetes 资深爱好者,Servicemesher 服务网格中文社区成员.获得 Kuberne ...

  6. 使用java实现希表的基础功能

    用java代码完成哈希表数据结构的简单实现, 以公司雇员的添加修改作为模拟实例 具体代码如下: package com.seizedays.hashtable; import java.util.Sc ...

  7. HTML自动刷新页面

    <meta http-equiv="refresh"content="5"/> 英文""

  8. 浅谈Redis未授权访问漏洞

    Redis未授权访问漏洞 Redis是一种key-value键值对的非关系型数据库 默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等 ...

  9. SpringBoot2 整合MinIO中间件,实现文件便捷管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.MinIO简介 1.基础描述 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  10. python学习笔记1 -- 面向对象编程类和实例

    由于之前有一定基础,所以python中的类的概接受的比较快,与其他语言一样, python也是通过类来进行事务的抽象,一切皆对象,要不然怎么说程序员不缺对象呢. 言归正传,python中类的声明是cl ...