DotNet学习笔记

2008年6月13日 #

判断文件是否打开

using System.IO;
using System.Runtime.InteropServices;

[DllImport(
"kernel32.dll")]
public static extern IntPtr _lopen(string lpPathName, int iReadWrite);

[DllImport(
"kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject);

public const int OF_READWRITE = 2;
public const int OF_SHARE_DENY_NONE = 0x40;
public readonly IntPtr HFILE_ERROR = new IntPtr(-1);
private void button1_Click(object sender, EventArgs e)
{
    
string vFileName = @"c:\temp\temp.bmp";
    
if (!File.Exists(vFileName))
    
{
        MessageBox.Show(
"文件都不存在,你就不要拿来耍了");
        
return;
    }

    IntPtr vHandle 
= _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);
    
if (vHandle == HFILE_ERROR)
    
{
        MessageBox.Show(
"文件被占用!");
        
return;
    }

    CloseHandle(vHandle);
    MessageBox.Show(
"没有被占用!");
}

posted @ 2008-06-13 17:43 烟丝 阅读(653) 评论(4) 编辑

2008年5月22日 #

SqlServer事务回滚失败

今天在写存储过程的时候,写了一个同时删除两个表数据的SP,使用了事务操作
测试一下,结果事务中出现了错误,原来做了外键,删除的顺序错了,正准备改了再继续.
却发现,刚事务失败应该进行回滚操作,可数据却删除了.再看另一个表,数据却还在.
看了刚sp的操作日志:第一条出错,第二条通过.
这就奇怪了.google下,没找到相同的问题.
把外建去掉,一样回滚失败,1小时后,还是无解
休息一下,喝杯水,突然想到,这不是本机,是局域网的一台2000的数据库,曾经因为安全的问题,被当时的网管修改了很多设置
该不会是把把回滚设置为Off吧
输入SET XACT_ABORT ON 再运行SP回滚正常.
郁闷啊,足足浪费我近两小时.


当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。

编译错误(如语法错误)不受 SET XACT_ABORT 的影响。


对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。有关详细信息,请参阅分布式查询和分布式事务

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

http://technet.microsoft.com/zh-cn/library/ms188792.aspx

posted @ 2008-05-22 22:47 烟丝 阅读(1567) 评论(0) 编辑

2008年5月15日 #

最近公司网站被Sql注入,安全不到位啊.写了段Sql来进行恢复

 

--该功能是删除所有包含@SearchString字符串位置开始,直到最末尾的数据
DECLARE @fieldtype sysname 
DECLARE @SearchString varchar(500)
SET @fieldtype='nvarchar' --字段类型
SET @SearchString = '</ti' --需要删除的数据

--删除处理 
DECLARE hCForEach CURSOR GLOBAL 
FOR 
SELECT N'update '+QUOTENAME(o.name) 
    
+N' set  '+ QUOTENAME(c.name) + N' = stuff(' + QUOTENAME(c.name) + ',charindex(''' + @SearchString + ''',' + QUOTENAME(c.name) + '),len(' + QUOTENAME(c.name) + '),'''')'
    
+N' where charindex(''' + @SearchString + ''',' + QUOTENAME(c.name) + ') > 0'
FROM sysobjects o,syscolumns c,systypes t 
WHERE o.id=c.id  
    
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1 
    
AND c.xusertype=t.xusertype 
    
AND t.name=@fieldtype 
EXEC sp_MSforeach_Worker @command1=N'?' 

posted @ 2008-05-15 08:24 烟丝 阅读(74) 评论(0) 编辑