2008年10月9日
1.SQL事务
CREATE PROCEDURE dbo.SPTransaction
(
@UpdateID int,
@UpdateValue nchar(50),
@InsertID int,
@InsertValue nchar(50)
)
AS
begin Tran
Update Region Set RegionDescription=@UpdateValue where RegionID=@UpdateID
insert into Region Values (@InsertID,@InsertValue)
declare @RegionError int
select @RegionError=@@error
if(@RegionError=0)
COMMIT Tran
else
ROLLBACK Tran
GO
2..Net事务
try
{
con.Open();
cmd.Transaction = conn.BeginTransaction();
cmd.ExecuteNonQuery();
cmd.Transaction.Commit();
}
catch
{
cmd.Transaction.Rollback();
throw;
}
finally
{
con.Close();
}
其他的没用过,不太会。
背景描述:当多个管理员在审核数据时,为了避免提取重复的数据,因为审核一条信息用时大约半小时,要不然在审核员提交数据库时再判断该记录是不是被审核然后给提示的话就太郁闷了,费了半天劲审核结果发现已经被其他管理员审核过了,而且还耽误时间,所以想了这个解决的方法,至少我自己能想到的问题是已经能够搞定了。
解决方法:
就是增加一个管理员提取待审核记录的时间类型字段。
实现步骤:
1.每次提取待审核记录时Update当前时间以前所有还未审核的记录,一般不会有很多。我们设置的一次性提取最大数为5条,避免少吃多占。这个操作是为了防止有审核员做了提取标记后,但没有进行审核而设置的。假设有10个管理员也顶多50条数据,一般情况下都是空Update操作,几乎耗时为0可以忽略不计。
sql:update Tables set AssessorId = null,OperateDateTime = null where IsAudit = 0 and OperateDateTime < 当前时间
2.提取条件是待审核并且还未被其他审核员提取的记录,还未被其他审核员提取也就是审核员Id字段为空。
sql:select * from Tables where IsAudit = 0 and AssessorId is null
3.提取后操作成功后Update审核员Id为自己,提取时间为当前时间。
sql:update Tables set AssessorId = 审核员Id,OperateDateTime = getdate() where Id = 提取成功的记录Id
4.审核通过后Update该记录为已审核状态,并且Update审核通过时间为当前时间。
sql:update Tables set IsAudit = 1 where Id = 已审核记录Id
数据字段:摘取关键字段说明一下就行了,Id(记录Id)、UserContent(用户内容)、IdAudit(是否审核)、AssessorId(管理员/审核员Id)、OperateDateTime(提取时间)。
2007年2月8日
摘要: 无刷新的树,在网上找的总也调试不通,也难怪,那么多JS调试起来肯定是比较头疼的。所以就参考小山的解决方案,然后在此基础上改了一下。
阅读全文
2007年2月2日
摘要: 在网上找了一些资料来实现这个效果,可是发现好多都是虚拟的,不能真实反映现在的数据载入进度,所以决定自己来写一个,采用AJAX的想法,从底层写起。代码如下:
阅读全文
2007年2月1日
清除表记录以及自增序号:
TRUNCATE TABLE '表名'
查看用户表的主键:
EXEC SP_PKEYS @TABLE_NAME = '表名'
查找是否存在重复的记录:
SELECT * FROM 表名 WHERE ID IN (SELECT ID FROM 表名 GROUP BY RB_ID HAVING COUNT(ID) > @COUNT)
查看用户建立的库中的所有表:
SELECT * FROM 库名.DBO.SYSOBJECTS WHERE XTYPE='U' AND STATUS > 0 ORDER BY NAME ASC
返回查询记录的行数:
SELECT ROWCOUNT_BIG()
查看表中的所有字段的全部信息:
SP_COLUMNS '表名'
查看表中的所有字段的结构:
SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.LENGTH FROM SYSCOLUMNS,SYSTYPES WHERE (SYSCOLUMNS.ID=OBJECT_ID('表名') AND SYSCOLUMNS.XTYPE=SYSTYPES.XTYPE) ORDER BY SYSCOLUMNS.COLORDER
查看表的操作权限:
SP_TABLE_PRIVILEGES 表名
偶然看到了园子里好多朋友都自定义了个性化的界面风格,心血来潮也想要搞一下看看,毕竟这是充满个性的世界。废话不多说直接来,谁让咱们都是弄这个的,乘工作休闲之余稍加修改即可改造成自己喜欢的界面风格,又参考了
Jesse Zhao's Blog的风格,看了他的源文件但是没看明白他是怎么弄得,不过我也有自己的办法。
先从文字开始,在CSS一栏中,重新设置了body的字体类型和颜色,奇怪的是公告中的文字颜色是跟着变了,可是字体类型和字间距、行距都还保持原样,又在公告中对比文章的风格加上了style样式。保存后预览就可以发现已经有很大的变化了。然后就是标题,到现在也不知道Jesse Zhao的标题是怎么弄成那样的,反正我是不会,我就仿照样子,先去掉了标题和子标题,在页首Html代码中写html来实现,嵌了一个一行两列的表格,然后写了一个CSS绑定就算基本上完成了,CSS定义了字体风格大小样式位置等属性。
其实整个过程很简单,最主要是能在工作之余充分运用所学的东西,就当作是娱乐活动了。
2007年1月30日
环境:Server2003+.NET2003+IIS6.0
出现的状态,举例说明一下:
用户登录时,输入正确的用户名和密码,点击登陆按钮,页面刷新后依然处于非登陆状态,并且没有任何提示。同样,输入错误的用户名和密码,点击登陆按钮,页面刷新后肯定是没有登陆的状态(因为是错误的用户名密码),奇怪的是但也没有任何提示。
另外就是翻页时偶尔会跳转回第一页。
自己查资料以及和同事研究分析,出现该问题的原因,很可能是由于程序中身份验证、页面之间传递的参数等类的信息,没有记录在客户段,而是记录在服务器端。(比如说:session applicaton之类的)
这种情况下,如果客户进行操作过程中,负载均衡进行了服务器之间的切换,就会出现身份验证不成功,或者参数丢失的现象,造成访问不稳定。
但实际情况是,程序中涉及该问题的都是使用Cookie来保存,时效30分钟。
客户提供参考说:指向负载均衡的其他系统都没有问题,唯一的区别是:其他系统是asp,我目前做的系统是.net。
网上查资料后发现解决该问题的办法是:将负载均衡器设置为半小时会话保持连接。但是客户那边的设置已经是半小时,所以此方法被排除。
另外说明:在web.config中已经设置了MachineKey,而且该字段值为所有系统的统一配置。
最后解决的方法有点出人意料,根据asp和.net的服务器配置不同,找到网管,然后给服务器安装了.Net Framework SP1以及.Net Framework SP1 ASP.NET 安全更新 - Windows Server 2003两个补丁包就好了。
在接手这个英文系统之后,发现所有涉及到用户输入的文本框全部屏蔽了单引号['],可想而知这对客户来说是很不公平的,也不可能接受,自然而然这个修改的任务落到我的头上。
在初学时期因为接收了一些培训以及经验的传递,所以一般底层的数据访问几乎全部采用参数化或存储过程,所以没有考虑过单引号[']在SQL语句中不能正常解析的问题。
习惯性的来博客园站内搜索,结果发现很多朋友都有过这样的情况。
其实最简单的实现方法很容易修改:将单引号[']替换为两个单引号[''],
string inputString = inputString.Replace("'", "''");
问题基本是解决了,可是却不了解底层的机制,为什么在数据中双引号['']会被识别为一个单引号[']更新到数据中呢?
用户输入:I'm student
则语句为:Update Table Set Field = 'I''m student' Where ID = 1
希望在以后的接触中多了解些底层的东西,而且这些基本的知识因为经验的传递也很容易忽略,看来多吃点亏并不是一件坏事,就像渔夫授徒的故事一样。
参考引用:
http://www.cnblogs.com/hjf1223/archive/2005/08/31/227170.html
http://www.cnblogs.com/linkcd/archive/2005/08/31/227276.html
http://www.cnblogs.com/huqingyu/archive/2004/07/21/26088.html