我刚开始.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. [redis] -- 为什么那么快

    1 完全基于内存 2 数据结构简单,对数据操作也简单 3 只有单线程,避免了不必要的上下文切换,也不存在竞态,不存在多进程或多线程导致的切换而消耗CPU,不用开了各种锁的问题 4 使用多路IO复用模型 ...

  2. 从Python开始学编程|PDF百度网盘免费下载|Python新手入门

    百度网盘免费下载:从Python开始学编程|附PDF免费下载 提取码:7nkf 豆瓣评分: 本书封面: 读者评论: 内容简介  · · · · · · 改编自Vamei博客的<Python快速教 ...

  3. Spring中与bean有关的生命周期

    前言 记得以前的时候,每次提起Spring中的bean相关的生命周期时,内心都无比的恐惧,因为好像有很多,自己又理不清楚,然后看网上的帖子,好像都是那么一套,什么beanFactory啊,aware接 ...

  4. 事件流和初识Jquery

    一.事件流 定义: 多个彼此嵌套元素,他们拥有相同的事件,最内部元素事件被触发后,外边多个元素的同类型事件也会被触发,多个元素他们同类型事件同时执行的效果称为“事件流”. 事件对象获取: 获得: ①主 ...

  5. 不使用字体图标和图片,只使用css如何做出展开收起的效果

    <i class="iconArrow" :class="[ littleNavState === item.meta.id ? 'arrowOpen' : '' ...

  6. Python Tuple(元组) min()方法

    描述 Python 元组 min() 函数返回元组中元素最小值.高佣联盟 www.cgewang.com 语法 min()方法语法: min(tuple) 参数 tuple -- 指定的元组. 返回值 ...

  7. PHP date_sunset() 函数

    ------------恢复内容开始------------ 实例 返回葡萄牙里斯本今天的日落时间: <?php// Lisbon, Portugal:// Latitude: 38.4 Nor ...

  8. HTML 布局 - 使用<div> 元素

    网站布局 大多数网站会把内容安排到多个列中(就像杂志或报纸那样).高佣联盟 www.cgewang.com 大多数网站可以使用 <div> 或者 <table> 元素来创建多列 ...

  9. PHP define() 函数

    实例 定义一个大小写敏感的常量: <?php define("GREETING","Hello you! How are you today?"); ec ...

  10. [草稿]Skill 中的map

    https://www.cnblogs.com/yeungchie/ Skill 中的map map mapc mapcan mapcar mapcon mapinto maplist