在MSSQL规范中,支持事务嵌套,不过在嵌套调用子存储过程时,要回滚事务,需把@@error传给最外层事务。举例如下:
drop table testtb
go
create table testtb
(
id int,name varchar(2)
)
go
--子过程
drop proc proc_insert_sub
go
create proc proc_insert_sub
@errResult int out--返回错误值
as begin
declare @errsum int
declare @transname varchar(20)
set @transname='subtran'
set @errsum=0
--正确数据
insert testtb values(1,'00')
set @errsum=@errsum+@@error
--错误数据
insert testtb values(2,'222')
set @errsum=@errsum+@@error
--正确数据
insert testtb values(1,'11')
set @errsum=@errsum+@@error
set @errResult=@errsum
end
go
--主过程
drop proc proc_insert
go
create proc proc_insert
as begin
declare @errsum int
declare @errsum1 int
set @errsum=0
set @errsum1=0
begin tran
exec proc_insert_sub @errsum1 out
print @errsum1
set @er ......
C Sharp(C#)中如何删除文件(文件夹)
直接删除:
using System.IO;
...
string filePath = @"D:\...\xxx.xxx";
if (File.Exists(filePath))
{
File.Delete(filePath);
}
else
{
Console.WriteLine("file not exist.");
Console.ReadLine();
}
删除到回收站:
using System.Runtime.InteropServices;
namespace CSharp
{
class Program
{
private const int FO_DELETE = 3;
private const int FOF_ALLOWUNDO = 0x40;
private const int FOF_NOCONFIRMATION = 0x0010;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
[MarshalAs(UnmanagedType.U4)]
public int wFunc;
public string pfrom;
public string pTo;
public short fFlags;
[MarshalAs(Unmanage ......
C Sharp(C#)中如何删除文件(文件夹)
直接删除:
using System.IO;
...
string filePath = @"D:\...\xxx.xxx";
if (File.Exists(filePath))
{
File.Delete(filePath);
}
else
{
Console.WriteLine("file not exist.");
Console.ReadLine();
}
删除到回收站:
using System.Runtime.InteropServices;
namespace CSharp
{
class Program
{
private const int FO_DELETE = 3;
private const int FOF_ALLOWUNDO = 0x40;
private const int FOF_NOCONFIRMATION = 0x0010;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
[MarshalAs(UnmanagedType.U4)]
public int wFunc;
public string pfrom;
public string pTo;
public short fFlags;
[MarshalAs(Unmanage ......
书中有几个问题有点模糊。记录一下。
Answer to Exercise 1-7
Write a program to print the value of EOF .
#include <stdio.h>
int main(void)
{
printf("The value of EOF is %d\n\n", EOF);
return 0;
}
EOF在stdio.h中的定义为#define EOF (-1)
其中()被忽略,只使用-1。 ......
在c语言中,hello world程序的编码其实未必就只有那一种书写格式,有些格式看起来有点乱码,却依然有着能正常编译,运行的良好品性,真是难能可贵,其中的秘密,看一看c语言中字符集和字符编码的描述吧。
??= include<stdio.h>
int main( int argc, char* argv??(??))
<%
if( argc > 1 )
printf( "Hello, %s!??/a??/n", argv<:1:>);
return 0;
%>
c语言中,源字符集和执行字符集都有基本字符集和扩展字符,为了是程序都能顺利编译运行,最好都用基本字符集中的字符。ISO/IEC 646标准允许把本国额外需要的字符安排到原先ASCII中"[", "]", "{", "}" 等占据的位置。为了将这些非标准内容有更好的可读性,c标准委员会有用“三联符序列” 表示缺少的字符。
三联符序列如下:
??= (#) ??) (]) ??( ([)
??! (|)   ......
在c语言中,hello world程序的编码其实未必就只有那一种书写格式,有些格式看起来有点乱码,却依然有着能正常编译,运行的良好品性,真是难能可贵,其中的秘密,看一看c语言中字符集和字符编码的描述吧。
??= include<stdio.h>
int main( int argc, char* argv??(??))
<%
if( argc > 1 )
printf( "Hello, %s!??/a??/n", argv<:1:>);
return 0;
%>
c语言中,源字符集和执行字符集都有基本字符集和扩展字符,为了是程序都能顺利编译运行,最好都用基本字符集中的字符。ISO/IEC 646标准允许把本国额外需要的字符安排到原先ASCII中"[", "]", "{", "}" 等占据的位置。为了将这些非标准内容有更好的可读性,c标准委员会有用“三联符序列” 表示缺少的字符。
三联符序列如下:
??= (#) ??) (]) ??( ([)
??! (|)   ......
即使将VirtualBox安装到别的盘上,其做成的虚拟机(系统,硬盘)仍会默认生成到系统盘,默认C:盘上,随着虚机数量和内容增加挤占了本来就不大的系统盘空间,很是不便。
开始将C:盘下.VirtualBox目录下的东西全盘拷贝至别处,然后在VirtualBox的文件/环境设置 中将『默认硬盘目录』和『默认假想机器』做相应的修改,但是VirtualBox并不认帐。怀疑在注册表,或UUID中写入与路径相关的内容。
于是删除现有VirtualBox(切忌要保存好.VirtualBox下的内容)。重新安装之后打开,理所当然什么信息都没有了,但那时不要急我们备份了硬盘和虚机的信息,这样一数据不会丢,二虚机的驱动设置等也应该不会丢。
接下来,重新做成原有虚机。
1,在VirtualBox的文件/环境设置 中将『默认硬盘目录』指向备份处,而将『默认假想机器』仍指向系统目录所在,因为这是无法改变的,且虚机
本身大小并不很大,放在c盘可以接受。
2,然后开始做成虚机。在设定完虚机的内存大小后,设置虚机硬盘是不要选择新规做成,而是选择使用既存硬盘。完成!
但是,网络设置等都丢失了,这些保存在Machines目录下各个虚机的XXX.xml ......
以为已经掌握条件编译,预编译的要领了,结果还是存在很多遗漏的地方,所以规整一下:
条件编译:
1
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
2
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。
3
#if 常量
...程序段1...
#elif<常量表达式2>
...程序段2...
#elif<常量表达式3>
...程序段3...
... ...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
例如:
#if defined(_PC) && defined(_SSE)
# ifdef DEBUG
# define __PC_VERIFY_ALIGNMENT__
# endif
# ifdef __PC_VERIFY_ALIGNMENT__
# define PC_VERIFY_ALIGN_ASSERT( ......
以为已经掌握条件编译,预编译的要领了,结果还是存在很多遗漏的地方,所以规整一下:
条件编译:
1
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
2
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。
3
#if 常量
...程序段1...
#elif<常量表达式2>
...程序段2...
#elif<常量表达式3>
...程序段3...
... ...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
例如:
#if defined(_PC) && defined(_SSE)
# ifdef DEBUG
# define __PC_VERIFY_ALIGNMENT__
# endif
# ifdef __PC_VERIFY_ALIGNMENT__
# define PC_VERIFY_ALIGN_ASSERT( ......