一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Asp.net

判断 DataReader 里面是否包含指定的列

用DataReader读取数据怎样判断当前记录的某列是否为空 : //调用: if (ReaderExists(dr, "Log_ID")) model.Log_DoctorID = GetInt(dr["Log_ID"]); /// <summary> /// 判断 DataReader 里面是否包含指定的列 /// </summary> /// <param name="dr"></param> /// <param name="columnName"></param> /// <returns></returns> public static bool ReaderExists(DbDataReader dr, string columnName) { int count = dr.FieldCount; for (int i = 0; i < count; i++) { if (dr.GetName(i).Equals(columnName)) { return true; } } return false; } /// <summary> /// 判断 DataReader 里面是否包含指定的列 /// </summary> /// <param name="dr"></param> /// <param name="columnName"></param> /// <returns></returns> public static bool ReaderExists2(DbDataReader dr, string columnName) { dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'"; return […]

龙生   28 Feb 2014
View Details

禁止浏览器缓存

html: <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-store, must-revalidate"> <meta http-equiv="expires" content="wed, 26 feb 1997 08:21:57 gmt"> <meta http-equiv="expires" content="0"> asp response.expires=0 response.addheader("pragma","no-cache") response.addheader("cache-control","no-store, must-revalidate") php header("expires: mon, 26 jul 1997 05:00:00 gmt"); header("cache-control: no-store, must-revalidate"); header("pragma: no-cache"); jsp: response.addheader("cache-control", "no-store, must-revalidate"); response.addheader("expires", "thu, 01 jan 1970 00:00:01 gmt"); 转自:http://www.oschina.net/code/snippet_81226_7660

龙生   19 Feb 2014
View Details

子域名里有下划线会影响IE下Session丢失

问题重现: 1.公司的一个项目上线后想部署一个测试环境,于是域名就命名为http://test_mj.renrengy.com。但问题来了:登录界面的验证码一直提示过期。   2.代码完全一样,于是开始怀疑是服务器的设置,于是把IIS的设置设置为一样,但问题依旧。 3.转念一样,只有IE下才有session丢失的问题,于是度娘一下,网上说IE10以后有丢session的传统,于是按照解决方法打补丁,可问题依旧。 4.但正式环境是正常的,于是给测试环境加了IP和端口,居然正常了。 5.看来是域名的问题,马上想到是不是下划线的问题,去掉后一切正常。   疑问: 1.为什么只有IE请求时才有此问题? 2.客户端也会影响到session?  

龙生   27 Jan 2014
View Details

格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错

在公司的一个项目里用到了WCF,当传输大量数据时总提示下面的错误,于是百度。看了所有的教程都没有解决问题,同事说你把binding的name去掉试试——问题完美解决。 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: strWhere。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。 行 1,位置 54208。”。有关详细信息,请参见 InnerException。 以下代码放到服务端即可: <bindings> <basicHttpBinding> <binding maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None" /> </binding> </basicHttpBinding> </bindings>

龙生   20 Jan 2014
View Details

下拉框Html.DropDownList 和DropDownListFor 的常用方法

一、非强类型: Controller: ViewData["AreId"] = from a in rp.GetArea() select new SelectListItem { Text=a.AreaName, Value=a.AreaId.ToString() }; View: @Html.DropDownList("AreId") 还可以给其加上一个默认选项:@Html.DropDownList("AreId", "请选择"); 二、强类型: DropDownListFor常用的是两个参数的重载,第一参数是生成的select的名称,第二个参数是数据,用于将绑定数据源至DropDownListFor Modle:    public class SettingsViewModel { Repository rp =new Repository(); public string ListName { get; set; } public  IEnumerable<SelectListItem> GetSelectList() { var selectList = rp.GetArea().Select(a => new SelectListItem { Text=a.AreaName, Value=a.AreaId.ToString() }); return selectList; } } Controller:        public ActionResult Index() { return View(new SettingsViewModel()); } View: @model Mvc3Applicationtest2.Models.SettingsViewModel @Html.DropDownListFor(m=>m.ListName,Model.GetSelectList(),"请选择") 转自:http://blog.csdn.net/w809026418/article/details/6740496

龙生   18 Jan 2014
View Details

无法在Web服务器上启动调试。调试器无法连接到远程计算机。原因可能是远程计算机不存在或防火墙阻止与远程计算机通信。

解决办法:   步骤 1: 先检查一下hosts文件有没有改好(默认路径:C:\WINDOWS\system32\drivers\etc) 添加一个新的重定向: 如:127.0.0.1  www.static.building.check.com   步骤 2: 禁用环回检查 请遵循以下步骤: 1. 打开注册表编辑器(单击 开始 ,单击 运行, 类型 regedit然后单击“确定”)。 2. 中注册表编辑器, 找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 3. 右击 Lsa ,指向“新建”,然后单击 DWORD 值 。 4. 类型 DisableLoopbackCheck,然后按“Enter” 5. 右击 DisableLoopbackCheck,然后单击“修改” 6. 在“数值数据”框中,键入“1”然后单击“确定” 7. 退出注册表编辑器,并重新启动计算机。 (可以不重启计算机) 步骤 3: 指定主机名 要指定主机名, 映射到环回地址并可连接到 Web 站点上,请按照下列步骤: 1. 打开注册表编辑器(单击“开始”,单击“运行”,类型“regedit”然后单击“确定”)。 2. 中注册表编辑器, 找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 3. 右击“MSV1_0”,指向“新建”,然后再单击“多字符串值”。 4. 类型 BackConnectionHostNames,然后按“Enter”。 5. 右击 BackConnectionHostNames,然后单击“修改”。 6. 在“数值数据”框中, 键入主机名或主机名为站点所在的本地计算机名称,“确定”。 7. 退出注册表编辑器, 并重新启动 IISAdmin 服务。   PS:无法在 Web 服务器上启动调试。与 Web 服务器通信时出现身份验证错误   在 IIS 6.0 中配置集成 Windows 身份验证 0(共 1)对本文的评价是有帮助-评价此主题   集成 […]

龙生   17 Jan 2014
View Details

WinForm UI 多线程 (线程间操作无效)

一个简单的Form, 按钮btnTest是enabled=false。在btnEnable的Click事件中 创建线程,在线程中尝试设置btnTest.Enabled = true; 发生异常:线程间操作无效: 从不是创建控件“btnTest”的线程访问它。 代码如下:

在默认情况下,C#不准许在一个线程中直接访问或操作另一线程中创建的控件,这是因为访问windows窗体控件本质上是不安全的。 线程之间是可以同时运行的,那么如果有两个或多个线程同时操作某一控件的某状态,尝试将一个控件变为自己需要的状态时, 线程的死锁就可能发生。 为了区别是否是创建该控件的线程访问该控件,Windows窗体控件中的每个控件都有一个InvokeRequired属性,这个属性就是用来检查本控件是否被其他线程调用的属性,当被创建该线程外的线程调用的时候InvokeRequired就为true。有了这个属性我们就可以利用它来做判断了。 光判断出是否被其他线程调用是没有用的,所以windows窗体控件中还有一个Invoke方法可以帮我们完成其他线程对控件的调用。结合代理的使用就可以很好的完成我们的目标。 上面问题的解决方法: 方法一: public Form1() { InitializeComponent();     CheckForIllegalCrossThreadCalls = false; } // // Summary: // Gets or sets a value indicating whether to catch calls on the wrong thread // that access a control’s System.Windows.Forms.Control.Handle property when // an application is being debugged. // // Returns: // true if calls on the wrong thread are caught; otherwise, false. [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [SRDescription("ControlCheckForIllegalCrossThreadCalls")] [Browsable(false)] public static bool CheckForIllegalCrossThreadCalls { get; set; } 方法二:

方法三: 通过ISynchronizeInvoke和MethodInvoker.

[…]

龙生   15 Dec 2013
View Details

C#多线程退出程序C#程序的几种退出

C#程序的几种退出 1.Application.Exit(); //好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵 2.System.Environment.Exit(0); //无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净 3.this.Close(); 4.Application.ExitThread(); msdn 对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。 所以解决办法就是在主线程初始化的时候,设置: Thread.CurrentThread.IsBackground = true; 这样,主线程就是后台线程,在关闭主程序的时候就会关闭主线程,从而关闭所有线程。 但是这样的话,就会强制关闭所有正在执行的线程,所以在关闭的时候要对线程工作的结果保存。

龙生   15 Dec 2013
View Details

C#四舍五入函数

C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的Math.Round 方法默认的也是 Banker 舍入法在 .NET 2.0 中 Math.Round 方法有几个重载方法Math.Round(Decimal, MidpointRounding)Math.Round(Double, MidpointRounding)Math.Round(Decimal, Int32, MidpointRounding)Math.Round(Double, Int32, MidpointRounding)将小数值舍入到指定精度。MidpointRounding 参数,指定当一个值正好处于另两个数中间时如何舍入那个值该参数是个 MidpointRounding 枚举此枚举有两个成员,MSDN 中的说明是:AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。注 意!这里关于 MidpointRounding.AwayFromZero 的说明是过错的!实际舍入为两个值中绝对值较大的值。不过 MSDN 中的 例子是正确的,英文描述原文是 it is rounded toward the nearest number that is away from zero.所以,要实现四舍五入函数,对于正数,可以加一个 MidpointRounding.AwayFromZero 参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:Math.Round(3.45, 2, MidpointRounding.AwayFromZero)不过对于负数上面的方法就又不对了因此需要自己写个函数来处理第一个函数:double Round(double value, int decimals){if (value < 0){return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);}else{return Math.Round(value, decimals, MidpointRounding.AwayFromZero);}} 第二个函数:double Round(double d, int i){if(d >=0){d += 5 * Math.Pow(10, -(i + 1));}else{d += -5 * Math.Pow(10, […]

龙生   12 Dec 2013
View Details

ASP.NET实现下载的中文文件名乱码处理

<% if request("infoid")<>"" then set rs=conn.execute("select * from nproduct where id="&request("infoid")) if not (rs.eof and rs.bof) then proname=rs("proname") content=rs("proinfo") end if rs.close set rs=nothing end if %>   早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代码: … Response.ContentType = mime; //相应的MIME TYPE Response.AppendHeader("Content-Disposition", "attachment; filename=\"" +fileName + "\""); Response.BinaryWrite(bytes); Response.End(); … 当fileName中包含中文时, 文件下载保存时, 文件名变成了乱码, 需要用户修改,这也就违被了我设定预设文件名的初衷. 解决办法1: 对fileName进行URL编码, 把下划线标注的那句改为Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");便可. 虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑. 还有一个办法, 可以很简单的解决以上的两个问题: 解决办法2: 假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为 http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了, 试一下, 结果一定让你非常满意! 转自:http://www.webshu.net/jiaocheng/programme/ASPNET/200606/1427.html

龙生   07 Dec 2013
View Details
1 32 33 34 44