迷失网络

如果你误读成“迷失公园”或“迷失侏罗纪”,那你可能真的迷失网络了。
随笔 - 88, 评论 - 1932, 引用 - 106

导航

关于

lostinet@lostinet.com这个油箱不能用了。因为空间没了,lostinet.com指向为127.0.0.1 。。。

标签

每月存档

最新留言

广告

JScriptProtector

JScriptProtector 是一个用来保护JScript代码的组件。因为版权不属于我,所以无法公开代码。

现在我在我的服务器上放了一个简单的服务,写惯JS的可以上去帮你的脚本加加密哦。

http://www.lostinet.com/jsps/

(举贤不避亲嘛。:-)

posted on 2004-09-22 01:30:00 by lostinet  评论(15) 阅读(5433)

SqlCommandBuilder.DeriveParameters 在 SqlTransaction 下的 Bug 的解决方法

我一向都是用开 SqlCommandBuilder.DeriveParameters 的。

但是那个方法有一个BUG。这个BUG导致该方法无法处理关联了SqlTransaction的SqlCommand

具体原因是DeriveParameters是创建一个新的SqlCommand来执行sp_procedure_params_rowset的。

但是临时的SqlCommand没有设置SqlTransaction,这样就直接导致错误。

下面是根据SqlCommandBuilder.DeriveParameters的实现复制出来的一个可用的版本:

(今天晚上回去看看 DotNet2.0 修正了这个问题没有。。)

posted on 2004-09-18 14:39:00 by lostinet  评论(8) 阅读(4576)

contentEditable="true" 的妙用 - 打印

不知道各位有没有做过用于打印的Web页。

我帮客户做这个页面的时候,喜欢把某些区域定为contentEditable="true",目的是让客户可以随便修改这些地方。

例如:

<Asp:Panel runat=server contentEditable="true"/>..<Asp:Label runat=server id=PrintTitle Text=PrintTitle/>..</Asp:Panel>

posted on 2004-09-18 13:35:00 by lostinet  评论(17) 阅读(7563)

刚学ASP。NET时写的防止重复提交的脚本。

内容是:

把这个作为 <-script src=.....js-><-/script-> 的形式Render到每个页面中就可以了。|
如果有PageBase,则在Init的时候用RegisterClientScriptBlock放上去更好。
因为客户没有抱怨过,所以也没有改进过。

posted on 2004-09-18 12:58:00 by lostinet  评论(366) 阅读(10670)

关于9月29的上海MVP聚会

http://blog.joycode.com/lostinet/ /lostinet/

谢谢GRACE的邀请。打算那天穿博客堂的衣服去 , 顺便让蝈蝈俊.net看看我有多胖:-)

EAKU的订单其实我已经下了,不过因为没有在线支付,要把钱寄给他公司真难啊。

(我去附近的工行,那里竟然没有汇款到公司的服务。虽然说都是上海。希望那个网站能做好。。)

右边的是 <-FieldSet-> <-Legend-> Title <-/Legend-> Content  。 刚认识它,感觉简单方便实用。

posted on 2004-09-17 13:08:00 by lostinet  评论(13) 阅读(3382)

关于重写WebControl.CreateControlStyle

因为WebControl不会自动保存ControlStyle的ViewState,所以如果要重写CreateControlStyle,那么最好按默认的策略,把ViewState作为Style保存数据的地方:
protected override Style CreateControlStyle()
{
   return new TableStyle(ViewState);
}
又或者是自己去保存这个Style..

(今天才注意到这个细节问题..)

posted on 2004-09-13 21:46:00 by lostinet  评论(9) 阅读(3562)

通常你会在什么地方遇到DBNull?

今天不只被外包,还要跑到虹桥机场去帮忙实施。可惜来到这里又好象没有什么事干。。:) 刚好可以写写Blog 。

刚好这几天写数据库操作比较多,是时候写写关于DBNull的东西了。

DBNull在DotNet是单独的一个类型 System.DBNull 。它只有一个值 DBNull.Value 。DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime 。。。

但是为什么 DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。

对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值 。 要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。

DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。

在 IDbCommand(OleDbCommand,SqlCommand...) 的ExecuteScalar的返回值中,情况可以这样分析:

select 1 这样返回的object是 1
select null 这样返回的是DBNull.Value
select isnull(null,1) 返回的是 1
select top 0 id from table1 这样返回的值是null
select isnull(id,0) from table1 where 1=0 返回的值是null

这里 ExecuteScalar 的规则就是,返回第一列,第一行的数据。如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。如果有第一行,但是第一列为空,那么返回的是 DBNull 。如果一行都没有,那么ExecuteScalar就返回null

规则就是这样的。这里容易犯的一个错误是,把ExecuteScalar返回DBNull与null的情况混淆,例如:

string username=cmd.ExecuteScalar().ToString();

除非你认为cmd执行后,肯定至少有一行数据,否则这里就会出错。

又或者 select id from usertable where username=@name 这样的sql语句,如果找不到记录,那么ExecuteScalar则会返回null,所以千万不要

int userid=Convert.ToInt32(cmd.ExecuteScalar());

或者你会这样写 SQL 语句:select isnull(id,0) from usertable where username=@name

但是 int userid=Convert.ToInt32(cmd.ExecuteScalar()); 依然会出错,因为上面的语句不成立时,仍然是不返回任何行。

对于IDbDataParameter(OleDDbParameter,SqlParameter..)的Value,如果为null,则代表该参数没有指定,或者是代表DEFAULT。如果为DBNull.Value,则代表SQL中的NULL

所以,如果你要调用存储过程,里面有参数 @val nvarchar(20)="AABB" ,
那么cmd.Parameters["@val"].Value=null 代表使用这个默认的 "AABB"
而cmd.Parameters["@val"].Value=DBNull.Value 代表使用NULL来传给 @val


你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false。


备注:以上的SQL语句全是指SQLSERVER2000的。其他的数据库是否为同样的行为,我不确定。

(先写到这里,想到再补充)

 

 

posted on 2004-09-07 15:43:00 by lostinet  评论(21) 阅读(11693)

第一次用OleDB,结果被它玩死。。

最近客户找我做一个更新SqlServer的算法,我在需求还算明确的情况下把代码写完,发了过去。
结果客户很快就打电话给我,说他们不是用 System.Data.SqlClient 的。要求我把代码改成OleDb的。

为了使程序能让OleDb和SqlClient都能用,我把程序的接口改为 IDbXXX .

可是问题出现了,OleDb竟然不把参数送到SqlServer那边去!

例如这样的代码,

其中 MyBussinessLogic 是我的实现。通过IDbXXX的方法,把CommandText,参数等信息放进去后,就执行Command 。 如果外面传一个 SqlTransaction 进来,那么是没有问题的。

但是如果外面传 OleDbTransaction 进来,那么这个OleDb的提供者就只把CommandText传到SqlServer去,那么执行当然会出错了。

以前没有用 OleDb 时,以为 SqlClient 只是性能上更加优化而已, 直到今天才知道还有这个问题存在。。

posted on 2004-09-03 03:20:00 by lostinet  评论(22) 阅读(7881)

最近写代码写晕了。

这段时间写代码写晕了,犯了个致命的错误:

如果你知道有问题了,那么找出问题很容易的。

反过来,如果心里没有认为它没有问题,那么就很难发现错误了。

posted on 2004-09-03 03:14:00 by lostinet  评论(39) 阅读(3242)

Powered by: Joycode.MVC引擎 0.5.2.0