별자리님께서 올려주신 formatnumber에 대한 이야기입니다.^^;
두고두고 도움이 될듯 싶어... 또 미쳐 양해도 구하지 않고 걍,, 올립니다. -_-;
formatnumber함수에 대해 자알 정리를 해주셨으니 참고들 하시구요^^
http://www.tubemusic.com
운영하시는 사이트에도 한번 놀러들 가보시구요^^;
=================================================================================
FormatNumber함수를 사용하세요!!
일반적으로.. 소수점 및 3자리마다 콤마(,) 사용시에 많이 사용됩니다..
예) 12345 -> 12,345 이렇게 표현할려면
DATA = 12345
FormatNumber(DATA, 0)
이렇게 처리하면..됩니다...
참고로.. 위의 DATA가 NULL(값이 존재하지 않는다)이면.. 오류가 발생하므로
꼭 주의 하시길 바랍니다..
※ FormatNumber 함수란? ※
숫자로 형식화된 식을 반환합니다.
FormatNumber(Expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit
[,UseParensForNegativeNumbers [,GroupDigits]]]])
인수
Expression
필수적인 요소. 형식이 지정되는 식입니다.
NumDigitsAfterDecimal
선택적인 요소. 표시될 소수점 이하의 자릿수를 나타내는 숫자 값입니다. 기본값인 -1은 컴퓨터의 국가별
설정을 사용함을 나타냅니다.
IncludeLeadingDigit
선택적인 요소. 소수점 이하의 유효 숫자 앞에 0을 표시할지 여부를 나타내는 Tristate 상수입니다. 그 값
에 대해서는 아래의 설정을 참조하십시오.
UseParensForNegativeNumbers
선택적인 요소. 음수 값을 괄호 안에 넣을지 여부를 나타내는 Tristate 상수입니다. 그 값에 대해서는 아래
의 설정을 참조하십시오.
GroupDigits
선택적인 요소. 제어판에 설정된 그룹 구분 기호를 사용하여 숫자를 구분할지 여부를 나타내는 Tristate 상
수입니다. 그 값에 대해서는 아래의 설정을 참조하십시오.
설정
IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits 인수는 아래 설정을 가집니다.
상수 값 설명
TristateTrue -1 True
TristateFalse 0 False
TristateUseDefault -2 컴퓨터의 국가별 설정 값을 사용합니다.
참고
하나 이상의 선택적인 인수를 생략하면 컴퓨터의 국가별 설정 값을 생략된 인수 값으로 사용합니다.
메모 모든 설정 정보는 국가별 설정의 숫자 탭에 있습니다.
예제) 1234.123
FormatNumber(DATA, 4) -> 1,234.1230
FormatNumber(DATA, 3) -> 1,234.123
FormatNumber(DATA, 2) -> 1,234.12
FormatNumber(DATA, 1) -> 1,234.1
FormatNumber(DATA, 0) -> 1,234
별자리님께서 올려주신 formatnumber에 대한 이야기입니다.^^;
두고두고 도움이 될듯 싶어... 또 미쳐 양해도 구하지 않고 걍,, 올립니다. -_-;
formatnumber함수에 대해 자알 정리를 해주셨으니 참고들 하시구요^^
http://www.tubemusic.com
운영하시는 사이트에도 한번 놀러들 가보시구요^^;
=================================================================================
FormatNumber함수를 사용하세요!!
일반적으로.. 소수점 및 3자리마다 콤마(,) 사용시에 많이 사용됩니다..
예) 12345 -> 12,345 이렇게 표현할려면
DATA = 12345
FormatNumber(DATA, 0)
이렇게 처리하면..됩니다...
참고로.. 위의 DATA가 NULL(값이 존재하지 않는다)이면.. 오류가 발생하므로
꼭 주의 하시길 바랍니다..
※ FormatNumber 함수란? ※
숫자로 형식화된 식을 반환합니다.
FormatNumber(Expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit
[,UseParensForNegativeNumbers [,GroupDigits]]]])
인수
Expression
필수적인 요소. 형식이 지정되는 식입니다.
NumDigitsAfterDecimal
선택적인 요소. 표시될 소수점 이하의 자릿수를 나타내는 숫자 값입니다. 기본값인 -1은 컴퓨터의 국가별
설정을 사용함을 나타냅니다.
IncludeLeadingDigit
선택적인 요소. 소수점 이하의 유효 숫자 앞에 0을 표시할지 여부를 나타내는 Tristate 상수입니다. 그 값
에 대해서는 아래의 설정을 참조하십시오.
UseParensForNegativeNumbers
선택적인 요소. 음수 값을 괄호 안에 넣을지 여부를 나타내는 Tristate 상수입니다. 그 값에 대해서는 아래
의 설정을 참조하십시오.
GroupDigits
선택적인 요소. 제어판에 설정된 그룹 구분 기호를 사용하여 숫자를 구분할지 여부를 나타내는 Tristate 상
수입니다. 그 값에 대해서는 아래의 설정을 참조하십시오.
설정
IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits 인수는 아래 설정을 가집니다.
상수 값 설명
TristateTrue -1 True
TristateFalse 0 False
TristateUseDefault -2 컴퓨터의 국가별 설정 값을 사용합니다.
참고
하나 이상의 선택적인 인수를 생략하면 컴퓨터의 국가별 설정 값을 생략된 인수 값으로 사용합니다.
메모 모든 설정 정보는 국가별 설정의 숫자 탭에 있습니다.
예제) 1234.123
FormatNumber(DATA, 4) -> 1,234.1230
FormatNumber(DATA, 3) -> 1,234.123
FormatNumber(DATA, 2) -> 1,234.12
FormatNumber(DATA, 1) -> 1,234.1
FormatNumber(DATA, 0) -> 1,234
DOM 객체의 기본 구조도를 알아야한다.
이객체들이 어디에 속해있는지 표를
보고 알아야할것이다
1.
내장함수
(1)
내장메시지
함수
alert("Hello."); confirm("정말로 삭제할껴?"); prompt(메시지, 초기값);
(2)
일반내장
함수
isFinite(number)
: number가
isNaN(value) : value가 순수한 문자이면 true, 숫자형태의 문자이면 false를 리턴
number(obj) : obj를 숫자로 변환하여 리턴
string(obj) : obj를 문자로 변환하여 리턴
eval(수식문자열 또는 Object 문자열) : 수식을 처리한 결과를 리턴, Object로 변환하여 리턴
parseInt(문자열, [진수]) : 문자열을 정수로 변환하여 리턴
parseFloat(문자열) : 문자열을 float-실수형으로 변환하여 리턴
escape(string) : ASCII 스트링을 URL로 인코딩
unescape(string) : ASCII 스트링을 URL로 디코딩
encodeURI(string) : 주어진 문자열을 URI로 encoding 한다.
decodeURI(string) : 주어진 문자열에서 encoding 된 URI를 decoding 한다.
encodeURIComponent(string) : 주어진 문자열을 URI로 encoding 한다.
decodeURIComponent(string) : 주어진 문자열에서 encoding 된 URI를 decoding 한다.
(3)
문자인코딩
함수
encodeURI() / decodeURI() : 다음문자만 인초딩한다 è ; / ? : @ & = + $ , - _ . ! ~ * ' ( ) #
encodeURIComponent() / decodeURIComponent() :
알파벳과 숫자 Alphanumeric Characters 외의, 대부분의 문자를 모두 인코딩한다.
escape() / unescape() : encodeURI() 와 encodeURIComponent() 의 중간 정도의 범위로 문자 인코딩
2.
내장
객체
(1) Object
객체
var book = new Object(); // empty Object --> var book = {};
book.title = "내장객체";
book.author = "kspark";
book.published_date = new Array('2006', '2007');
book.getInformation = function() { return this.title + ", " + this.author; }
function DisplayPropertyNames(obj){
var names = "";
for( var name in obj ) names += name + "\n";
alert(names);
alert(obj.getInformation());
}.
(2) Function 객체 : 함수 객체, 객체변수 = new Function([매개변수 리스트], 함수의 처리 내용)
var square = function(x) { return x*x }
var sports = new Object();
sports.soccer = new Function('var name = "soccer"; return name;');
var sum = new Function( "x", "y", "return x+y" );
function execute(){
alert( "Sports name : " + sports.soccer() );
alert( "sum : " + sum(5,10) );
}
(3) Array
배열
객체
length 속성, join(문자열),reverse(),sort(compareFunction),slice(시작위치,종료위치),concat(배열객체)
var list = new
Array();
(4) Date 날짜 객체
var date = new
Date();
getDate, getDay, getFullYear, getHours, getMilliseconds, getMinutes, getMonth,
getSeconds, getTime, getTimezoneOffset, getUTCDate, getUTCDay,
getUTCFullYear, getUTCHours, getUTCMilliseconds, getUTCMinutes,
getUTCMonth, getUTCSeconds, getYear, parse, setDate, setFullYear, setHours,
setMilliseconds, setMinutes, setMonth, setSeconds, setTime, setUTCDate,
setUTCHours, setUTCMilliseconds, setUTCMinutes, setUTCMonth, setUTCSeconds,
setYear, goGMTString, toLocaleString, toString, toUTCString, UTC, valueOf
(5) String
객체
문자열 조작 메소드
toLowerCase(), toUpperCase(), charAt(인덱스), substring(인덱스1, 인덱스2), slice(인덱스1, 인덱스2),
substr(시작인덱스, 길이), indexOf(문자열), lastIndexOf(문자열), concat(문자열), split(분리자, [개수]), charCodeAt([인덱스]), fromCharCode(숫자)
글자 모양을 변경하는 메소드
big(), small(), blink(), bold(), fixed(), italics(), strike(가운데줄), sub(아래첨자),sup(위첨자),
fontcolor("색"), fontsize(크기)
위치 이동하는 메소드
anchor("책갈피명"), link("이동위치");
var str = "Hello! David";
str.slice(6, str.length); str.link(#david);
(6) 수학관련 객체 Math : 각종 수학적 계산을 돕는 Math 객체
Math.PI, Math.sin(x), Math.abs(x), Math.max(x,y)
(7)
수치관련
객체 Number
수치 형태의 문자열을 수치 데이터로 변환하는 객체, new Number(수치 형태의 문자열);
var Ten = new Number("10");
(8) 논리형 객체 Blooean : 논리 객체, new Boolean(논리값);
(9) 스크린 화면 객체 Screen : Screen.availWidth, availHeight(화면의 실제 너비, 높이 ),
Screen.width, height(스크린 실제 너비, 높이), pixelDepth(익스플로워 지원안됨),
colorDepth(사용가능색상수)
(10) Event :
이벤트
객체
이벤트 함수의 종류
Abort (onAbort) : 문서를 읽다가 중단시켰을때(브라우저에서 멈춤을 눌렀을때)
Blur (onBlur) : 사용자가 입력을 포커스를 원도우나 입력양식 요소에서 제거했을때
Click (onClick) : 사용자가 입력 양식의 요소나 링크를 클릭 했을때
Change (onChange) : 사용자가 요소의 값을 바꾸었을 때
DblClick (onDblclk) : 사용자가 입력 양식의 요소나 링크를 더블 클릭 했을때
DragDrop (onDragDrop) : 마우스를 드래그 하는 순간 발생
Error (onError) : 문서나 이미지를 읽는 중에 강제로 중지하는 순간 발생
Focus (onFocus) : 사용자가 입력 포커스를 원도우나 입력 양식의 요소로 이동했을 때
KeyDown (onKeyDown) : 사용자가 키를 눌렀을때
KeyPress (onKeyPress) : 사용자가 키를 누르고 있을때
KeyUp( onKeyUp) : 사용자가 눌렀던 키를 놓았을때
Load(onLoad) : 브라우저에서 문서을 읽었을때
MouseDown(onMouseDown) : 마우스를 누르는 순간 발생함
MouseMove(onMouseMove) : 마우스가 움직일 때
MouseOver(onMouseOver) : 사용자가 link나 anchor위로 마우스로 옮겼을때
MouseOut(onMouseOut) : 마우스가 특정 영역 안에 있다가 나갔을때
MouseUp(onMouseUp) : 마우스 커서를 이미지 맵이나 링크 위에서 내려 놓을 때
Move(onMove) : 윈도우나 프레임의 위치가 이동되는 순간 발생
Reset (onReset) : 사용자가 입력 양식을 초기화 했을 때
이벤트에서 발생하는 객체들의 종류이며 , 네스케이프와 익스플로어의 경우를 따로 분리했다.
[네스케이프
에서의 이벤트
객체]
data : DragDrop 이벤트로 인해 드롭된 객체의 URL이 들어있는 스트링 배열
height, width : 윈도우나 프레인의 길이와 너비(픽셀표시)
pageX, pageY : 픽셀로 나타낸 커서의 수평/수직 위치(페이지에서의 상대적위치)
screenX, screenY : 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)
layerX, layerY : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 레이어에 대한 상대적 위치.
target : 이벤트가 전송된 원래 객체
type : 발생한 이벤트 유형
which : 눌려진 마우스 버튼(left:1, middle:2, right:3)이나 눌려진 키의 ASCII값
modifiers : 마우스나 키 이벤트와 연관된 수정자 키
(ALT_MASK,CONTROL_MASK,SHIFT_MASK,META_MASK) 를 식별
[익스플로어 에서의 이벤트
객체]
screenX, screenY : 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)
clientX, clientY : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 웹페이지에서의 상대적 위치
offsetX, offsetY : 픽셀로 나타낸 커서의 수평/수직 위치,이벤트가 발생한 컨테이너에 대한 상대적 위치
X, Y : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 문서에 대한 상대적 위치
srcElement : 이벤트가 전송된 원래 객체
type : 발생한 이벤트 유형
keyCode : 키 누름과 연관된 Unicode 키 코드를 식별
button : 이벤트가 발생했을 때 눌려진 마우스 버튼 식별(0:눌려진버튼없음, 1:왼, 2:오, 4:가)
altkey,ctrlkey,shiftkey : true나 false로 설정하여 이벤트가 발생했을 때 Alt키와 Control키, Shift 키 중에 어떤 것이 눌려졌는지 알려준다.
cancelBubble : true나 false로 설정하여 이벤트 버블링을 취소하거나 활성화한다.
fromElement, toElement : 이동 중인 HTML 요소 지정
reason : 데이터 소스 객체에 대한 데이터 전송 상태를 나타내는데 사용
returnValue : true나 false로 설정하여 이벤트 핸들러의 리턴값을 나타낸다. 이벤트 핸들러에서 true나 false를 리턴하는 것과 같다.
위에서 열거한 이런 내용을 암기는 하지 못하더라도 모두 이해하고 어떤경우에 쓰이는지를
파악하고 있어야하겠다. 자바스크립트를 사용하는 사람들의 가장 기본적으로 갖추어야 하는 지식이다.
자바스크립트, 16진수 헥사(Hex), 2진수, 10진수 변환 함수; JavaScript

자바스크립트에서, 10진수 숫자를 16진수나 2진수로 상호 변환하는 방법입니다.
"toString(진법)" 이라는 메서드 속에 진법을 넣어주면 됩니다. 가령, 16진수로 변환하려면 16을 넣으면 됩니다.
JavaScript 진법 변환: 십진수 십육진수 이진수
예제 소스 파일명: example.html
var n;
// 10진수 255를 16진수로 변환
n = (255).toString(16);
document.write(n, '<br />');
// 출력 결과: ff
// 10진수 255를 2진수로 변환
n = (255).toString(2);
document.write(n, '<br />');
// 출력 결과: 11111111
// 16진수 ff를 10진수로 변환
n = (0xff).toString(10);
document.write(n, '<br />');
// 출력 결과: 255
// 16진수 0a를 2진수로 변환
n = (0x0a).toString(2);
document.write(n, '<br />');
// 출력 결과: 1010
// 변수 속의 10진수 123을 16진수로 변환
var foo = 123;
n = foo.toString(16);
document.write(n, '<br />');
// 출력 결과: 7b
// 변수 속의 10진수 123을 16진수로 변환
// + 대문자로 변환
var foo = 123;
n = foo.toString(16).toUpperCase();
document.write(n, '<br />');
// 출력 결과: 7B
</script>
11111111 이런 숫자는 2진수인지 10진수인지 알 수 없으므로, 우선 이 숫자를 문자열로 저장한 후, parseInt()에서 2진수로 간주하여 10진수로 변환하고, 그것을 다시 다른 진법, 예를 들어 16진수로 변환하면 됩니다. 다음 예제와 같습니다.
var n = '11111111'; // 2진수를 문자열로서 저장
n = parseInt(n, 2); // n 속의 숫자를 2진수로 취급하여, 10진수 숫자로 변환
// 10진수화된 2진수를, 16진수로 변환
n = n.toString(16);
document.write(n, '<br />');
// 출력 결과: ff
</script>
HTML color codes and names
Quick links About codes and colors and how to apply About color codes and how to apply HTML color codes are hexadecimal triplets representing the colors red, green, and blue. For example, in the the color red, the color code is FF0000, which is '255' red, '0' green, and '0' blue. Complete information about how to apply HTML color codes using CSS, the <FONT> tag and applying other font types can be found on document CH000072.
Color code chart
|
오피스 2007의 '리본X UI'에서 OfficeMenu(좌측 상단의 동그란 MS마크의 메뉴) 의 동작을 runtime 시에 동적으로 disable 시키고 싶었는데 그게 안되더라. 는 것이었다.
애초부터 안되는거 아니냐고? 설마! 그랬으면 내가 이런 일말의 희망을 가지고 이틀동안 인터넷을 떠돌아 다녔을리가 없다.
실제로 다음과 같이 리본 메뉴 스키마를 작성하면 disable 시킬수가 있다.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon>
<officeMenu>
<button idMso="FileNew" enabled ="false"/>
</officeMenu>
<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup"
label="My Group">
<toggleButton id="toy" label="연습" size="large" onAction="OnToggle" imageMso="HappyFace"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
근데.. 왠지 될거 같지 않은가? 왠지 모르게.. 저걸 읽어서 UI에 변화를 줄수 있다면 반대로 변화도 줄수 있을거야. MS가 나보다는 똑똑하니까, 분명히 무슨 함수라던지 속성이라던지가 있을꺼야.. 이러면서 이틀간 인터넷에서 사경을 헤멨(응?)..
근데, 암만 찾아봐도 dynamic하게 변경은 못하는것 같더라. 그래서 또 생각했다. 그러면 저 '리본 메뉴 스키마'를 2개(enable/disable)만들어 둬서 reload하면 될꺼야. 또 뒤졌다... 분명히 뭔가 있기는 있다. 그런데 이해가 안되더라.
.NET 환경에서 작성된 내용도 아닌거 같고..(난 영어가 시러염!!!) 어쨌든 오늘도 그렇게 무료히 시간을 죽이고 있었더니..
invalidate라는 함수가 눈에 띄었다. (사실 어제부터 눈에 거슬렸으나.. 정확한 용법이 없으니 이게 뭘 하는지 모르겠는거라..)
MSDN을 뒤졌다. 오예~ 예제가 있다. 우선 살짝쿵 훑었다. 뭐 별거 없네.. 하고 닫으려는 순간 눈에 밟히는 문장이 있었으니..
[Instead of the Save dialog box appearing, the custom dialog box appears, as shown in Figure 2.]...
disable이 안된다면 내가 원하는대로 돌리면 되지(아놔.. '돼지' 야? '되지' 야?)..!!
그래서 결과 코드는 다음과 같이..
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<!-- QAT(Quick Access Toolbar) 부분 -->
<commands>
<command idMso="FileSave" onAction="MySave" />
</commands>
<ribbon startFromScratch="false">
<!-- OfficeMenu 부분 -->
<officeMenu>
<button idMso="FileSave" enabled ="true" onAction ="MySave"/>
</officeMenu>
<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup"
label="My Group">
<toggleButton description="this is test" id="toy" label="연습" size="large" onAction="OnToggle" imageMso="HappyFace"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Public Sub MySave(ByVal control As Office.IRibbonControl, ByRef cancelDefault As Boolean)
If (repurposing) Then
System.Windows.Forms.MessageBox.Show("로컬 컴퓨터에 저장할수 없음.")
cancelDefault = True
Else
cancelDefault = False
End If
End Sub
#Region "Smile Toggle Button Action"
Public Sub OnToggle(ByVal control As Office.IRibbonControl, ByVal isPressed As Boolean)
If (isPressed) Then
ReportTaskPane.Visible = True
Else
ReportTaskPane.Visible = False
End If
repurposing = isPressed
ribbon.Invalidate()
End Sub
#End Region
referenced from: http://msdn2.microsoft.com/en-us/library/bb462633.aspx
SQL Server 2005 Database Backup and Restore using C# and .NET 2.0

Introduction
The following article describes accessing a SQL Server 2005 database backup and restoring it programmatically using C#.NET 2.0 and SMO. This article provides coding samples to perform the task.
SQL Server Management Objects (SMO) is a collection of objects that are designed for programming all aspects of managing Microsoft SQL Server.
The following namespaces can be used to access SQL Server 2005 programmatically:
Microsoft.SqlServer.management
Microsoft.SqlServer.Management.NotificationServices
Microsoft.SqlServer.Management.Smo
Microsoft.SqlServer.Management.Smo.Agent
Microsoft.SqlServer.Management.Smo.Broker
Microsoft.SqlServer.Management.Smo.Mail
Microsoft.SqlServer.Management.Smo.RegisteredServers
Microsoft.SqlServer.Management.Smo.Wmi
Microsoft.SqlServer.Management.Trace
Pre-Requisite
You need to reference the following namespaces before using this code:
- Microsoft.SqlServer.Management.Smo;
- Microsoft.SqlServer.Management.Common;
I used these two class to perform the backup and restore operations:
- Microsoft.SqlServer.Management.Smo.Backup
- Microsoft.SqlServer.Management.Smo.Restore
For more information, regarding these two class, check MSDN:
Backup database
public void BackupDatabase(String databaseName, String userName,
String password, String serverName, String destinationPath)
{
Backup sqlBackup = new Backup();
sqlBackup.Action = BackupActionType.Database;
sqlBackup.BackupSetDescription = "ArchiveDataBase:" +
DateTime.Now.ToShortDateString();
sqlBackup.BackupSetName = "Archive";
sqlBackup.Database = databaseName;
BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
sqlBackup.Initialize = true;
sqlBackup.Checksum = true;
sqlBackup.ContinueAfterError = true;
sqlBackup.Devices.Add(deviceItem);
sqlBackup.Incremental = false;
sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;
sqlBackup.FormatMedia = false;
sqlBackup.SqlBackup(sqlServer);
}
Restore Database
public void RestoreDatabase(String databaseName, String filePath,
String serverName, String userName, String password,
String dataFilePath, String logFilePath)
{
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
sqlRestore.Action = RestoreActionType.Database;
String dataFileLocation = dataFilePath + databaseName + ".mdf";
String logFileLocation = logFilePath + databaseName + "_Log.ldf";
db = sqlServer.Databases[databaseName];
RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName+"_log", logFileLocation));
sqlRestore.ReplaceDatabase = true;
sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
sqlRestore.PercentCompleteNotification = 10;
sqlRestore.PercentComplete +=
new PercentCompleteEventHandler(sqlRestore_PercentComplete);
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
}
The portion of code uses full backup features. If you want, you can perform incremental and differential backup as well.
Updates: June 8, 2008
In order to use this code, your SQL Server authentication mode needs to be
configured as Mixed Mode authentication. If you use Windows Authentication, then
you need to modify the ServerConnection
:
SqlConnection sqlCon = new SqlConnection ("Data Source=Bappi; Integrated Security=True;");
ServerConnection connection = new ServerConnection(sqlCon);
Modify the ServerConnection
portion of both code samples using
this code in order to use Windows Security.
Conclusion
As this code uses the SQL Server 2005 backup/restore facility, the code follows the rules of SQL Server 2005 while backing up or restoring databases.
(1) ^ (caret) : 라인의 처음이나 문자열의 처음을 표시
예 : ^aaa (문자열의 처음에 aaa를 포함하면 참, 그렇지 않으면 거짓)
(2) $ (dollar) : 라인의 끝이나 문자열의 끝을 표시
예 : aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓)
(3) . (period) : 임의의 한 문자를 표시
예 : ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓)
a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참)
(4) [] (bracket) : 문자의 집합이나 범위를 나타냄, 두 문자 사이의 "-"는 범위를 나타냄
[]내에서 "^"이 선행되면 not을 나타냄
이외에도 "문자클래스"를 포함하는 [:문자클래스:]의 형태가 있다.
여기에서 "문자클래스"에는 alpha, blank, cntrl, digit, graph, lower,
print, space, uppper, xdigit가 있다.
이에 대한 자세한 내용은 C언어의 <ctype.h>를 참조하면 된다.
예를 들어 [:digit:]는 [0-9]와 [:alpha:]는 [A-Za-z]와 동일하다.
이외에 [:<:]와 [:>:]는 어떤 단어(숫자, 알파벳, '_'로 구성됨)의 시작과 끝
을 나타낸다.
예 : [abc] (a, b, c 중 어떤 문자, "[a-c]."과 동일)
[Yy] (Y 또는 y)
[A-Za-z0-9] (모든 알파벳과 숫자)
[-A-Z]. ("-"(hyphen)과 모든 대문자)
[^a-z] (소문자 이외의 문자)
[^0-9] (숫자 이외의 문자)
[[:digit:]] ([0-9]와 동일)
(5) {} (brace) : {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타냄
예 : a{3} ('a'의 3번 반복인 aaa만 해당됨)
a{3,} ('a'가 3번 이상 반복인 aaa, aaaa, aaaa, ... 등을 나타냄)
a{3,5} (aaa, aaaa, aaaaa 만 해당됨)
ab{2,3} (abb와 abbb 만 해당됨)
[0-9]{2} (두 자리 숫자)
doc[7-9]{2} (doc77, doc87, doc97 등이 해당)
[^Zz]{5} (Z와 z를 포함하지 않는 5개의 문자열, abcde, ttttt 등이 해당)
.{3,4}er ('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당)
(6) * (asterisk) : "*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열
예 : ab*c ('b'를 0번 또는 여러번 포함하므로 ac, ackdddd, abc, abbc, abbbbbbbc 등)
* (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨)
.* (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨)
ab* ('b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등)
a* ('a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등)
doc[7-9]* (doc7, doc777, doc778989, doc 등이 해당)
[A-Z].* (대문자로만 이루어진 문자열)
like.* (직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등)
(7) + (asterisk) : "+" 직전의 선행문자가 1번 이상 나타나는 문자열
예 : ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abckdddd, abbc, abbbbbbbc 등, ac는 안됨)
ab+ ('b'를 1번 또는 여러번 포함하므로 ab, abccc, abb, abbbbbbb 등)
like.+ (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨)
[A-Z]+ (대문자로만 이루어진 문자열)
(8) ? (asterisk) : "?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열
예 : ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨)
(9) () (parenthesis) : ()는 정규식내에서 패턴을 그룹화 할 때 사용
(10) | (bar) : or를 나타냄
예 : a|b|c (a, b, c 중 하나, 즉 [a-c]와 동일함)
yes|Yes (yes나 Yes 중 하나, [yY]es와 동일함)
korea|japan|chinese (korea, japan, chinese 중 하나)
(11) \ (backslash) : 위에서 사용된 특수 문자들을 정규식내에서 문자를 취급하고 싶을 때 '\'를 선행시켜서 사용하면됨
예 : filename\.ext ("filename.ext"를 나타냄)
[\?\[\\\]] ('?', '[', '\', ']' 중 하나)
정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함
정규식은 Unix의 대표적인 유틸리티인 vi, emacs, ed, sed, awk, grep, egrep 등에서 사용할 수 있다. 다음은 grep에서 정규식을 활용한 예를 보여 주고 있다.
(1) $ 명령어 | grep '정규식'
<= 명령어의 결과를 grep이 입력받아 정규식을 이용하여 패턴을 찾아냄
예 : $ who | grep 'hgkim' <= hgkim이라는 사용자가 login 해 있는지를 알아봄
$ ls -al | grep '^d.*' <= ls -al 의 결과 'd'로 시작하는 라인(즉 디렉토리들)
만을 출력
$ ls -al | grep '^d.*' <= ls -al 의 결과 'd'로 시작하는 라인(즉 디렉토리들)
만을 출력
$ ls -al | grep '^[^d]..x..x..x' <= 디렉토리는 제외하고("[^d]") 누구나
실행가능한 파일("..x..x..x")들 찾기
(2) $ grep '정규식' 파일이름
<= 파일을 입력받아 정규식을 이용하여 패턴을 찻아냄
예: $ grep 'telnet' /etc/inetd.conf
이외의 명령어들도 grep과 유사한 형태로 이용된다. 따라서 정규식을 잘 이용하면 유닉스의 활용이 배가 될 것이다.
PHP에서는 정규식과 관련하여 다음의 네가지 함수를 제공한다.
int ereg(string givenPattern, string givenString, array matched);
- givenString을 "string1stringAstring2stringBstring3 ... string9stringI" 로 주어져 있다고 하자. 이때 stringA, stringB, ... , stringI는 NULL 이어도 상관이 없다(즉 givenString은 "string1string2string3 ... string9" 인 경우임).
- givenString이 위와 같이 주어진 경우,
givenPattern은 "(pattern1)stringA(pattern2)stringB(pattern3) ... (pattern9)stringI"로 입력하여야 한다. 즉 pattern1, pattern2, ..., pattern9는 각각 string1, string2, ... , string9에서 찾고자하는 정규식인 것이다.
- 이때 pattern1이 string1에서 발견한 패턴은 $matched[1]에 저장되고, pattern2가 string2에서 발견한 패턴은 $matched[2]에 저장되고, ..., pattern9가 string9에서 발견한 패턴은 $matched[9]에 저장된다. PHP3의 경우 ereg에서는 최대 9개 까지의 pattern을 찾을 수 있도록 설정되어 있음에 유의하자.
- 그리고 $matched[0]에는 $matched[1]stringA$matched[2]stringB ... $matched[9]stringI가 저장된다.
- ereg가 반환하는 값은 $matched[0]에 저장된 문자열의 개수이다.
- ereg는 case sensitive
- eregi는 case insensitive
예1 :
코드 => print(ereg ("(.*)ef([abc].*)","abcdefabc",$matched));
print("<br>");
while (list($a,$b)=each($matched))
if ($b)
print("$a, $b <br>");
결과 => 9
0, abcdefabc
1, abcd
2, abc
예2 :
코드 => print(ereg ("(.*)d(.*)e(.*)qrs(.*)","abcdefghijklmnopqrstuvwxyz",$matched));
print("<br>");
while (list($a,$b)=each($matched))
if ($b)
print("$a, $b <br>");
결과 => 26
0, abcdefghijklmnopqrstuvwxyz
1, abc
3, fghijklmnop
4, tuvwxyz
예 3 :
코드 => $date="1999-11-17";
if (ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs))
print("$regs[3].$regs[2].$regs[1]");
else print("Invalid date format: $date");
결과 => 17.11.1999
예 4 :
코드 => $joomin="711011-1234567";
if (ereg("([0-9]{2})([01]{1}[09]{1}[0-3]{1}[0-9]{1})-([12]{1}[0-9]{6})",$date, $regs))
print("Valid");
else print("Invalid format: $joomin");
int eregi(string givenPattern, string givenString, array matched);
- ereg의 'case insensitive' 버젼
예 :
코드 => $email="xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr";
eregi("(^[_\.0-9a-z-]+)@(([0-9a-z][0-9a-z-]+\.)+)([a-z]{2,3}$)",$email,$matched);
while (list($a,$b)=each($matched))
if ($b) print("$a, $b <br>");
결과 => 0, xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr
1, xs9_tx-abc.yyy_c
2, cne.kyungsung.ac.
3, ac.
4, kr
코드 => eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email,$matched);
while (list($a,$b)=each($matched))
if ($b) print("$a, $b <br>");
결과 => 0, xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr
1, ac.
string ereg_replace(string givenPattern, string replacementPattern, string givenString);
- givenString에서 givenPattern에 부합하는 텍스트(matched text)를 찾아서,
replacementPattern으로 대체
- givenPattern이 "(패턴)"으로 묶인 문자열들을 포함하고 있으면, replacementPattern에는 이에 대응하는 "\\digit(문자열)" 형태의 문자열들을 포함하고 있어야 한다(digit는 0, 1, ... ,9 중 하나). 그리고 givenString은 "(패턴)"을 이용해 찾은 결과들을 "\\digit(문자열)"에 있는 "문자열"들로 대체하게 된다. "\\0" 는 givenString 전체에 대해 "(패턴)"의 결과를 적용할 때 이용된다.
- 변경된 문자열을 리턴
- case sensitive
예 :
코드 => $string = "This is a test";
print(ereg_replace(" is", " was",$string)); print("<br>");
print(ereg_replace("( )is","\\1was",$string)); print("<br>");
print(ereg_replace("(( )is)","\\2was",$string)); print("<br>");
print(ereg_replace("(( )is)(( )a)(( )test)", "\\1was\\2an\\3exam",$string));
결과 => "This was a test";
"This was a test";
"This was a test";
"This was an exam";
예 2 : redundant whitespace 없애기
코드 => $str ="~ s/\s+/ /g";
$str = eregi_replace("[[:space:]]+", " ", $str);
print("$str<br>");
결과 => ~ s/\s+/ /g
string eregi_replace(string givenPattern, string replacementPattern, string givenString);
- ereg_replace의 'case insensitive' 버젼
[펌] http://phpschool.com/bbs2/inc_view.html?id=11581&code=tnt2
C# .NET에서의 Regular Expression 사용 예제
(Example for Regular Expression with C# .NET)