C#

摘要: OleDb执行Oracle带自定义函数的SQL深度历险 阅读全文
posted @ 2010-10-20 11:51 阿牛 阅读(109) | 评论 (0) 编辑
摘要: 朋友说开发电信的MMS,其实需要图片作为附件放在调用WebService接口上,使用Http的Content-Type: Multipart/Related;来发送,真让人感觉不伦不类的。不知道为什么不设计成一个字段是BASE64编码得了呗。 难道只能用朋友说的拼字段的方法了不? 我用Reflect分析了一下,貌似这样也可以实现。 我们知道,我们添加一个WebService引用时,会自动生成从 SoapHttpClientProtocol 的子类。我的想法是,我们写一个 继承自"SoapHttpClientProtocol” 的子类SoapHttpClientProtocolEX, 重写方法:GetWebRequest() 返回我们写的代码 HttpWebRequestEx类,然后在原始 HttpWebRequest 类的GetRequestStream()时,返回我们的流转移器:NetwordStreamEx ,并在方法关闭流 Close() 前,加入自定义的附件信息。 阅读全文
posted @ 2009-12-27 23:56 阿牛 阅读(391) | 评论 (1) 编辑
摘要: 新浪博客上好多牛人的博客,有时候想下载下来离线观看,便有了这个软件。 此软件本想做一个支持众博客的下载器,不过后来精力有限,只完成了新浪博客的部分博客的下载。 下载时,目前想从博客地址上,得到博客类型,然后加载不同的博客配置文件,从而获得文章列表分页信息,文章总数等信息,再依配置文件,匹配出博客文章地址。 目前支持在线查看博客,和导出博客到本地功能。(附程序和源码下载) 阅读全文
posted @ 2009-12-24 22:12 阿牛 阅读(280) | 评论 (0) 编辑
摘要: 研究了一下,发现系统已经有这类的函数,晕吧!! 实现一个类似Func和Action的方法吧. 调用示例如下: object inst = new Program(); decimal ret = inst.Dynamic("HelloWorld", Guid.NewGuid(), 2009); 阅读全文
posted @ 2009-12-13 16:43 阿牛 阅读(224) | 评论 (0) 编辑
摘要: 上周五快下班时,看到一个博友BillGan文章:DynamicMethod (JIT Compiler encountered an internal limitation. )我还是相信中国人 ,当时没有太多时间,只是实现了调用静态方法的访问,不能称为动态方法调用。今天看到,BillGan好像已经死心了。 不过,其实没有那么绝望的吧,我实现了一个原型,原理是使用Emit声明一个变量,然后强制类型转化成类型,最后再去调用方法: 阅读全文
posted @ 2009-12-13 15:30 阿牛 阅读(464) | 评论 (3) 编辑
摘要: 在使用Dotnetfx2.0开发WinForm程序时,经常需要使用后台线程来进行运算,并把运算的过程数据,结果数据等信息更新显示到窗口中。由于窗体线程和工作线程不是一个线程,我们不能在工作线程中直接设置窗体中控件的属性,而需要使用Control.Invoke(Delegate del,...)来间接调用。其实,可以使用一个匿名函数很简单的调用。阅读全文
posted @ 2009-10-24 23:30 阿牛 阅读(1765) | 评论 (11) 编辑
摘要: 题目要求:双倍超立方数是指一个正整数可以正好被拆分为两种不同的a^3+b^3的方式,其中a,b均为整数且0阅读全文
posted @ 2009-06-02 00:21 阿牛 阅读(1527) | 评论 (11) 编辑
摘要: 上一篇文章 "无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(一)"中,我们实现了监视每个页面的执行情况和调用WebService的简单信息。 这次我们继续深入一下SoapExtension的应用,在不改变Soap的WSDL文档的情况下,配合在Dotnet编写的WebService站点配置我们编写的SoapExtension,来穿透传输我们自定义的数据对象。由于SoapExtension是全局的,我们还要加一些标识来区分服务器是否已经配置了我们的SoapExtension,从而不影响其它的WebService调用。 在SoapExtension中,我想到有两种方案: 一种是直接在SoapMessage.Headers中插入自定义的SoapHeader对象,然后在客户端的序列化后,从SoapUnknownHeader中取出数据,然后反序列化成自定义的对象。 第二种是对SoapMessage.ContentType 添加一个额外的标识,在另一方检测这个标识,来从流中取出自己长度的数据。反序列化成自定阅读全文
posted @ 2009-06-01 18:00 阿牛 阅读(1214) | 评论 (2) 编辑
摘要: 先简单介绍一下项目吧,我们这个项目是用VS2003开发的,老早一个项目。WEB前端机+业务处理(WebService层)+数据库分别布置在不同的计算机上。 现在老总有一个需求,要统计出每个页面的执行时间,以及每次调用过哪些WebService方法,调用的时间等参数。 可行的方案有好多,但我感觉使用HttpModule+SoapExtension,可以不在改变目标系统源码的基础上,完成这项工作。也许有一天,老总说,现在不需要再统计了,我就直接配置一下,不再统计就行了。 由于要调用WebService,我们采用编写一个SoapExtension,在它的ProcessMessage函数中,在message.Stage是 BeforeSerialize 时,记一个开始时间,并采集一些数据,在message.Stage==AfterDeserialize时,再采集一些时间等数据。最后通过HttpContext.Current.Items[WSInvokeMonitorKey]获取HttpModule的对象,把采集到的数据放在HttpModule里阅读全文
posted @ 2009-05-22 10:51 阿牛 阅读(1863) | 评论 (6) 编辑
摘要: 接触到一个老的项目,里面大量使用OleDbConnection进行数据库操作,在执行SQL块语句时,对它的顺序参数、命名参数很不了解。据说不能使用命名参数,但我这里试验了一下,好像是可以的,只是对参数的顺序还是有要求。看看你能知道下面的输出结果吗? 测试环境:OleDbConnection+Oracle10G 阅读全文
posted @ 2009-04-02 10:08 阿牛 阅读(2302) | 评论 (11) 编辑
摘要: 一个数据缓存,一般由数据来源,缓存方案,缓存读取来完成,现在有了匿名函数,可以把获取数据来源变为匿名函数。这样就可以直接声明一个缓存: protected static CacheManager companyCache = new CacheManager(new SmsDatabaseCache(), (key) => { return SmsDatabase.Instance.Context.Company.Where(c => c.ShortNumber == (string)key).SingleOrDefault(); }); SmsDatabaseCache是一个缓存方案,还可以使用SimpleCache,TimeoutCache等实现了ICache接口的类,因为我的ICacheManager从ICache继承,所以还可以实现级连缓存哟 阅读全文
posted @ 2009-03-19 00:57 阿牛 阅读(1689) | 评论 (2) 编辑
摘要: 有朋友说加载这样的XML失败,我试了一下。阅读全文
posted @ 2009-03-11 15:06 阿牛 阅读(177) | 评论 (0) 编辑
摘要: 在执行SQL语句时,有时我们必须使用Like语句,还需要动态依条件拼出SQL然后执行。此时你可以会因为一点点麻烦而拒绝使用参数化SQL,其实一点也不麻烦。阅读全文
posted @ 2009-03-03 12:39 阿牛 阅读(413) | 评论 (0) 编辑
摘要: 在异架构间通讯时,我们一般会采用WS。我遇到的情况是WSDL已经由AXIS生成,我需要用Dotnet实现服务器。 简单实现后,发现里面的 NotifySOAPHeader 总是取不值,添加 SoapUnknownHeader[] 后,里面有值。可见是不能识别AXIS发送来的SoapHeader。本文尝试解决了这个问题,避免了为Java调用时写代码从SoapUnknownHeader中取数据了。 阅读全文
posted @ 2009-02-23 16:57 阿牛 阅读(1789) | 评论 (10) 编辑
摘要: 如果你的项目要求你的程序对高达几万条的数据在集中的时间内执行固定序列的操作,且不能完全使用存储过程时而需要使用程序来执行时。会需要这些优化。 我们知道,SQL服务器对一条语句的执行,需要分析、编译、执行这些步骤,通过参数化我们可以对一种命令只分析和编译一次,而执行多次,从而提高效率。在执行时,如果每次提交语句,可以完成多条SQL语句,则可以减少通讯时间,也可以提高效率。 通过 System.Data.IDbCommand.Prepare() 方法,我们可以在第一次执行语句时,分析和编译SQL语句,然后保存这个Command对象,下次使用时,直接设置参数执行。这个方法对Oracle和MsSql Server都有效。 如果执行一批语句,在T-SQL和PLSQL中有一点不一样。 在T-SQL中,多条SQL语句之间,使用分号";"分隔就行。 delete from TableA where id = @id;update TableB set Name=@name where id=@id 而在PLSQL中,则需要阅读全文
posted @ 2008-12-29 10:02 阿牛 阅读(2963) | 评论 (18) 编辑
摘要: 动态控件,复合控件,相信大家都已经很熟悉了。只要达到同样的展示及功能,用什么样的方式实现应该取决于实际情况。我在一个项目中遇到的情况是:已经有了很多页面,但每个页面都没有用Validation控件来验证输入的有效性。 为了达到相同的展示效果: 常规办法:是为每个页面的每个TextBox有选择的生成RequiredFieldValidator、RangeValidator、 CompareValidator、RegularExpressionValidator、FilteredTextBoxExtender。但这个方法,需要每个页面都去添加,并且统一调整起效果来,工作量太大。 复合控件:是写一个复合控件,依参数来添加验证控件。这个也需要在页面中统一添加一次(工作量约为第一个办法的1/3),还需要更改一下后台的控件类型声明(我的后台代码在另一个程序集中)。 动态控件:写了个直接继承自TextBox的控件,在适当的地方,依参数来添加验证控件。这个也需要在页面中统一改动一下(工作量和复合控件的方法相当),不过,后台的代码不用做发改阅读全文
posted @ 2008-12-10 17:29 阿牛 阅读(1449) | 评论 (11) 编辑
posted @ 2008-11-24 19:33 阿牛 阅读(648) | 评论 (1) 编辑
摘要: 有时候,我们不需要用CheckBoxList,这时就不能得到选中的值,其实,我们可以把值存在ViewState中,这样在服务器端可以取出来。阅读全文
posted @ 2008-11-17 18:22 阿牛 阅读(127) | 评论 (0) 编辑
摘要: 建立步骤如下:
一. 建立一个 State Machine Workflow Library ,命名为StateLib. 完成后,修改文件WorkFlow1为WF_Login
二. 在里面通过设计器,加入下面的工作流(具体如何设计,不再说明),最终结果如图:
三. 把工作流发布成WebService,VS2005会自动命名为:StateLib_WebService
四. 添加一个新WebSite项目,命名WorkflowSite. 在Default.aspx中添加输入框,以及按钮
五. 编写事件,测试一下阅读全文
posted @ 2007-09-12 14:24 阿牛 阅读(2713) | 评论 (7) 编辑
摘要: 实现任意字符组成的任意进制的转换类阅读全文
posted @ 2007-07-09 16:51 阿牛 阅读(1650) | 评论 (9) 编辑
摘要: 用正则式查找IMG的路径阅读全文
posted @ 2006-09-01 15:59 阿牛 阅读(253) | 评论 (2) 编辑
摘要: 在一个项目中,要求C#和Java交互,为了保障数据的安全传输,我们用到DES加密。 在DES加密中,要求指定Key,IV,CipherMode(CBC),PaddingMode。Key和IV,CipherMode都好说,只是PaddingMode不好指定,因为C#的模式有:ANSIX923、ISO10126、None、PKCS7、Zero,而Java有:OAEPWithAndPadding、PKCS5Padding、SSL3Padding,没有交集呀。 我用C#先写出来的,PaddingMode = PKCS7,Java方的不好作了。没有办法,只好帮人家写一个Java的例子,于是有了下面的代码:(Java高手不要笑话呀) 阅读全文
posted @ 2006-04-14 10:49 阿牛 阅读(1732) | 评论 (0) 编辑