我刚开始.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. NIO入门之多路复用选择器Selector

    简介 Selector 是 java.nio.channels 包下的重要组件,阅读本文可以带你了解常用的 API.本文中把 Channel 翻译成信道,按照个人习惯也可以称作是通道.管道. Sele ...

  2. VIM的常用快捷方式(尽量简洁,删去能组合实现的且不易记的)

    vi可以分为三种状态,分别是一般模式.编辑模式和命令行模式 1一般模式:以vi打开一个文件就直接进入一般模式了(这是默认的模式).在这个模式中, 你可以使用上下左右按键来移动光标,你可以使用删除字符或 ...

  3. 华东师范大学p163页,用闭区间套定理证明数列的可惜收敛准则,被网友解决了。

  4. 第37课 智能指针分析(指针特征操作符( -> 、 *)重载)

    1. 永恒的话题:内存泄漏 (1)动态申请堆空间,用完后不归还 (2)C++语言中没有垃圾回收的机制 (3)指针无法控制所指堆空间的生命周期------------指针是变量,可以指向内存堆空间,但是 ...

  5. php 导出数据到excel类

    原文链接地址:http://www.oschina.net/code/snippet_212240_21885 标注:在使用时一定要屏蔽掉//$bodyVal = $this->charset( ...

  6. 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi  当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...

  7. Metal 线宽如何选择

    https://www.cnblogs.com/yeungchie/ Metal 线宽如何选择 假如Metal是为了传输电流,则主要需要从解决和减小它的寄生电阻.寄生电容方面多做考虑.寄生电感一般忽略 ...

  8. luogu P1712 [NOI2016]区间 贪心 尺取法 线段树 二分

    LINK:区间 没想到尺取法. 先说暴力 可以发现答案一定可以转换到端点处 所以在每个端点从小到大扫描线段就能得到答案 复杂度\(n\cdot m\) 再说我的做法 想到了二分 可以进行二分答案 从左 ...

  9. C/C++编程笔记:C语言对齐问题【结构体、栈内存以及位域对齐】

    引言 考虑下面的结构体定义: 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4. 现在,我们编写一个简单的程序: 运行后输出: 为什么会这 ...

  10. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...