'2017/09'에 해당되는 글 4건

Programming/.NET

보통 컬렉션에 요소를 초기화 하거나 추가할때 Add메서드를 사용하지만

 

List<int> li = new List<int>();
li.Add(1);
li.Add(2);
li.Add(3);
li.Add(4);
li.Add(5);

 

다음처럼 초기화가 가능합니다.

 

List<int> li = new List<int{ 1, 2, 3, 4, 5 };

만약 클래스의 요소를 List화 한다면

 

class Member
{
    public int I
    {
        get;

        set;
    }

    public int J
    {
        get;
        set;
    }
}

 

클래스의 개체초기화 구문이 함께 사용될 수도 있습니다.

 

List<Member> li = new List<Member{
    new Member() { I = 100, J = 200 },
    new Member() { I = 100, J = 200 },
    new Member() { I = 100, J = 200 }
};

 

Dictionary의 경우 보통 아래와 같이 초기화를 하지만

 

Dictionary<intstring> dic = new Dictionary<intstring{
    {0, "hong" },
    {1, "choi" }
};

 

다음의 초기화 방식도 지원합니다.

 

Dictionary<intstring> dic = new Dictionary<intstring{
    [0] = "hong",
    [1] = "choi"
};

 

특이한건 위 Dictionary를 초기화 하는 방식중 2번째것은 같은 키값을 추가해도 오류가 발생하지 않는다는 것입니다.

 

Dictionary<intstring> dic = new Dictionary<intstring{
    [0] = "hong",
    [1] = "choi",
    [0] = "kim" //정상
};

 

만약 이러한 구문이 발생하면 키 [0]의 값은 뒤의 kim으로 바뀌게 됩니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET MVC] 다중 모델 사용하기 (Tuple)  (0) 2017.10.18
[C#] dynamic 과 덕 타이핑(duck typing)  (0) 2017.10.10
[C#] 컬렉션 초기화  (0) 2017.09.26
[ASP.NET MVC] 유효성 확인 - 2  (0) 2017.09.20
[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
[C#] SqlDataReader  (0) 2017.08.30
0 0
Programming/.NET

아래 글에서는 이미 모델이나 컨트롤러단위에서 특정 값에 유효성규칙을 적용하는 방법을 알아보았습니다.

 

[Programming/.NET] - [ASP.NET MVC] 유효성 확인 - 1

 

 

그런데 위에서 사용한 방식은 서버측 유효성검사입니다. 데이터를 서버로 전달하고 서버단에서 유효성을 판단해 다시 클라이언트에 넘겨주는 처리방식인데 대부분은 서버측 유효성검사를 2차적으로 판단하도록 권장하고 있습니다. 매번 서버로의 판단을 요청하면 그 만큼 서버측에 부담을 주게되고 사용자 입장에서는 서버로 부터 응답이 와야하니 즉각적인 반응을 기대하기 어렵기 때문입니다.

 

그래서 이번에는 스크립트를 통해 유효성을 확인하는 방법인 클라이언트측 유효성 확인에 대해 알아보고자 합니다.

 

우선 클라이언트측에서 유효성검사를 수행하려면 NuGet을 통해 Jquery와 Jquery.Validation, Microsoft.Jquery.Unobtrusive.Validation 패키지를 설치하도록 합니다. 패키지를 설치하고 나면 다음과 같이 Jquery와 관련 스크립트를 추가해 주십시오. 참고로 예제는 '유효성 확인 - 1'글과 동일한 예를 사용합니다.

 

@model WebApplication1.Classes.MemberJoin

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <style type="text/css">
        .input-validation-error {border:solid red;}
        .validation-summary-errors {color:blue;}
    </style>
    <script src="~/Scripts/jquery-3.1.1.js"></script>
    <script src="~/Scripts/jquery.validate.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
    <title>MemberJoin</title>
</head>
<body>
    @Html.ValidationSummary()
    @using (Html.BeginForm()) {
        <p>@Html.ValidationMessageFor(x => x.Id)</p>
        <p>아이디: @Html.EditorFor(x => x.Id)</p>
        <p>이름: @Html.EditorFor(x => x.Name)</p>
        <p>이메일: @Html.EditorFor(x => x.Email)</p>
        <p>나이: @Html.EditorFor(x => x.Age)</p>
        <input type="submit" value="확인" />
    }
</body>
</html>


이게 전부입니다. 단지 스크립트를 추가하는 것만으로 클라이언트의 유효성 검사가 수행됩니다. 예제를 실행하고 Id 입력부분을 공백으로 남겨둔 후 '확인'버튼을 누르면 서버로 재전송을 수행하지 않고 즉각적으로 브라우저에 오류메세지를 푝시할 것입니다.

 

 

 

유효성 검사과정에서 또 하나 살펴봐야할 부분은 서버측유효성검사를 수행하되 AJAX처럼 필요한 데이터만을 전송하고 빠르게 응답해야 하는 경우입니다. 어떤 사이트에서 회원가입을 하는데 내가 사용하려는 ID가 실제 다른 사람이 사용하고 있는 것인지를 확인해보는 경우가 그것입니다.

 

사용중인 ID인지를 확인하는 경우는 클라이언트측 유효성검사로는 불가능할것입니다. 클라이언트가 사용중인 모든 ID에 대한 데이터를 가지고 있지 않기에 무득히 서버에 확인을 요청해야 하는 것입니다. 그런데 서버측의 유효성검사를 위해 매번 페이지가 새로고침되면서 응답을 받아와야 한다면 서버도 트래픽면에서 부담되고 사용자도 느린 응답을 감수해야 합니다.

 

이러한 문제를 해결하기 위해서는 우선

 

public JsonResult IdCheck(string id)
{
    if (id.Trim() == "cliel")
        return Json("이미 사용중인 아이디입니다."JsonRequestBehavior.AllowGet);
    else
        return Json(trueJsonRequestBehavior.AllowGet);
}

 

유효성을 실제 확인하기 위한 메서드를 만들어야 합니다. 이 메서드는 JsonResult 형식을 반환해야 하며 내부에서 오류가 발생할경우와 그렇지 않은 경우에 대한 Json메서드를 구현하고 있습니다.

 

public class MemberJoin
{
    [Required(ErrorMessage ="Id가 입력되지 않았습니다.")]
    [Remote("IdCheck""Home")]
    public string Id { getset}
    public string Name { getset}
    public string Email { getset}
    public int Age { getset}
}

 

그리고 모델에서 Remote 속성을 통해 방금전 구현한 액션메서드와 컨트롤러를 지정하면 자동적으로 필요한 기능의 유효성검사를 수행하게 됩니다.

'Programming > .NET' 카테고리의 다른 글

[C#] dynamic 과 덕 타이핑(duck typing)  (0) 2017.10.10
[C#] 컬렉션 초기화  (0) 2017.09.26
[ASP.NET MVC] 유효성 확인 - 2  (0) 2017.09.20
[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
[C#] SqlDataReader  (0) 2017.08.30
[C#] String  (0) 2017.08.22
0 0
Programming/.NET

URL을 통한 요청시 세그먼트값이나 특정 액션메서드에서의 모델 바인딩의 경우 처리할 데이터가 유효한지 확인해야할 필요가 있습니다. 예를 들면 입력된 데이터 타입이 맞는지 또는 필요한 데이터가 입력은 되었는지 하는 것들입니다.

 

public class MemberJoin
{
    public string Id { getset}
    public string Name { getset}
    public string Email { getset}
    public int Age { getset}
}

▶ Model

 

public ActionResult MemberJoin()
{
    return View(new MemberJoin());
}

[HttpPost]
public ActionResult MemberJoin(MemberJoin mj)
{
    return View("Result"mj);
}

▶ Action Method

 

@model WebApplication1.Classes.MemberJoin

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>MemberJoin</title>
</head>
<body>
    @using (Html.BeginForm()) {
        <p>아이디: @Html.EditorFor(x => x.Id)</p>
        <p>이름: @Html.EditorFor(x => x.Name)</p>
        <p>이메일: @Html.EditorFor(x => x.Email)</p>
        <p>나이: @Html.EditorFor(x => x.Age)</p>
        <input type="submit" value="확인" />
    }
</body>
</html>
▶ MemberJoin View

 

@model WebApplication1.Classes.MemberJoin

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Result</title>
</head>
<body>
    <p>아이디 : @Model.Id</p>
    <p>이름 : @Model.Name</p>
    <p>이메일 : @Model.Email</p>
    <p>나이 : @Model.Age</p>
</body>
</html>
▶ Result View

 

예제에서 MemberJoin 은 사용자 추가에 관한 특정한 기능을 수행한다고 가정해 보겠습니다. 처음 페이지가 표시되고 Id와 Name필드에 데이터를 채워 '확인'버튼을 누르면 입력된 내용은 Result 를 통해 출력될 것입니다.

 

그런데 만약 Id 라는 필드만은 필수적으로 채워져야 한다면 입력확인은 아래와 같이 할 수 있을 것입니다.

 

public ActionResult MemberJoin(MemberJoin mj)
{
    if (string.IsNullOrEmpty(mj.Id))
        ModelState.AddModelError("Id""ID가 입력되지 않았습니다.");


    if (ModelState.IsValid)
        return View("Result"mj);
    else
        return View();
}

 

MemberJoin 인스턴스인 mj 개체를 통해 Id속성에 값이 있는지의 여부를 확인하고 없으면 ModelState의 AddModelError메서드를 호출해 오류메세지를 등록합니다. 이 후 ModelState의 IsValid 속성을 확인하여 유효성에 문제가 있었는지를 판단합니다. 만약 이 값이 true면 아무런 문제가 없음을 의미합니다.

 

또는 데이터 자체에 대한 유효성을 검사하려면

 

if (ModelState.IsValidField("Age"))
    ModelState.AddModelError("Age""나이 입력이 잘못되었습니다.");

 

IsValidField 메서드를 사용해서 유효성을 확인할 수도 있습니다.

 

그런데 실제 프로그램을 테스트해보면 AddModelError 메서드를 통해 등록한 메세지가 실제 페이지에서는 아무런 영향도 주지 않음을 확인할 수 있습니다. 유효성 확인에서 문제가 발생했을때 오류내용과 오류와 연관된 HTML개체를 표시하려면 뷰에 추가적인 작업이 필요합니다.

 

@model WebApplication1.Classes.MemberJoin

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <style type="text/css">
        .input-validation-error {border:solid red;}
        .validation-summary-errors {color:blue;}
    </style>
    <title>MemberJoin</title>
</head>
<body>
    @Html.ValidationSummary()
    @using (Html.BeginForm()) {
        <p>아이디: @Html.EditorFor(x => x.Id)</p>
        <p>이름: @Html.EditorFor(x => x.Name)</p>
        <p>이메일: @Html.EditorFor(x => x.Email)</p>
        <p>나이: @Html.EditorFor(x => x.Age)</p>
        <input type="submit" value="확인" />
    }
</body>
</html>

 

우선 뷰에 2가지 스타일을 적용했는데 하나는 .input-validation-error 이고 다른 하나는 .validation-summary-errors 입니다. ASP.NET MVC에서 오류가 발생하면 오류와 관련된 HTML개체에 .input-validation-error 스타일을 추가하게 되는데 예제는 그에 맞추어 스타일을 적용한 것이고 .validation-summary-errors 는 실제 오류내용을 출력하기 위한 것으로서 @Html 의 ValidationSummary() 메서드를 사용하면 등록된 오류메세지를 사용자에게 보여줄 수 있고 다음과 같이 매개변수를 지정해 오류메세지를 출력할때 약간의 조정을 시도할 수 있습니다.

 

@Html.ValidationSummary(true)

 

매개변수로 bool 타입의 true값을 전달하면

 

ModelState.AddModelError("""ID가 입력되지 않았습니다.");

 

위와 같이 AddModelError에서 첫번째 매개변수에 공백을 전달한 오류만 출력하도록 합니다.

 

@Html.ValidationSummary("오류가 발생했습니다.")

 

오류 메세지를 표시하기전 지정한 내용을 먼저 출력하도록 합니다.


@
Html.ValidationSummary(true"오류가 발생했습니다.")

 

위 2가지 경우를 혼합한 형식입니다.

 

<body>

    @Html.ValidationSummary()
    @using (Html.BeginForm()) {
        <p>@Html.ValidationMessageFor(x => x.Id)</p>
        <p>아이디: @Html.EditorFor(x => x.Id)</p>
        <p>이름: @Html.EditorFor(x => x.Name)</p>
        <p>이메일: @Html.EditorFor(x => x.Email)</p>
        <p>나이: @Html.EditorFor(x => x.Age)</p>
        <input type="submit" value="확인" />
    }
</body>

 

ValidationSummary 메서드를 통해 종합적인 오류 메세지를 표시함과 동시에 ValidationMessageFor를 사용하면 개별적인 오류 메세지를 따로 표시할 수 있습니다.

 

위에서는 모델 바인딩과정에서 유효성을 검사하고 오류메세지를 처리했습니다. 예를 들어 Id의 경우 바인딩이후의 속성값을 확인해 값이 없으면 오류메세지를 생성하는 식입니다. 하지만 이러한 규칙은 모델자체를 통해서도 적용할 수 있습니다.

 

public class MemberJoin
{
    [Required(ErrorMessage ="Id값이 존재하지 않습니다.")]
    public string Id { getset}
    public string Name { getset}
    public string Email { getset}
    public int Age { getset}
}

 

모델 필드에 Required 속성을 적용하면 값이 반드시 할당되도록 강제할 수 있으며 ErrorMessage를 통해 값이 할당되지 않았을 경우에 대한 오류 메세지를 지정할 수 있습니다.

 

public ActionResult MemberJoin(MemberJoin mj)
{
    if (ModelState.IsValid)
        return View("Result"mj);
    else
        return View();
}

 

모델에 유효성규칙을 추가하고 나면 보시는 바와 같이 더이상 인의적인 유효성확인작업은 필요가 없어 집니다.

 

이 외에도 모델에는 둘의 값을 비교하게 하는 Compare, 입력값의 범위를 지정하는 Range, 정규식을 통한 유효성검사를 수행하는 RegularExpression, 문자열값최대길이를 제한하는 StringLength등의 유효성검사 규칙을 지정할 수 있습니다.

 

public class MyRequired : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        return (((string)value) == "cliel");
    }
}

 

필요하다면 유효성검사 규칙을 직접 작성할 수도 있습니다. 단지 클래스에 RequiredAttribute 를 상속받고 IsValid 를 재정의하기만 하면 됩니다. 예제에서는 value로 넘어오는 값이 cliel일때만 true를 반환하도록 하였습니다. 이 메서드에서 false를 반환하면 유효성검사 규칙을 통과하지 못한것으로 판단합니다.

 

public class MemberJoin
{
    [MyRequired(ErrorMessage ="값이 일치하지 않습니다.")]
    public string Id { getset}
    public string Name { getset}
    public string Email { getset}
    public int Age { getset}
}

 

직접 작성한 유효성검사 클래스는 위에서 처럼 모델에 클래스명을 지정해 적용할 수 있습니다. 또는

 

public class MemberJoin : IValidatableObject
{
    public string Id { getset}
    public string Name { getset}
    public string Email { getset}
    public int Age { getset}

    public IEnumerable<ValidationResultValidate(ValidationContext vc)
    {
        List<ValidationResult> err = new List<ValidationResult>();


        if (string.IsNullOrEmpty(Id))
            err.Add(new ValidationResult("Id가 입력되지 않았습니다."));

        return err;
    }
}

 

모델에 IValidatableObject를 상속받으면 모델 자체에서 직접 유효성검사로직을 포함시킬 수도 있습니다.

'Programming > .NET' 카테고리의 다른 글

[C#] 컬렉션 초기화  (0) 2017.09.26
[ASP.NET MVC] 유효성 확인 - 2  (0) 2017.09.20
[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
[C#] SqlDataReader  (0) 2017.08.30
[C#] String  (0) 2017.08.22
[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
0 0
Programming/Microsoft SQL Server

백업된 DB를 다시 복원시도하면 기본적으로 본래 백업대상이된 DB의 이름으로 복원을 시도하게 됩니다. 본래 DB가 잘못되어 삭제된 상태면 상관없지만 간혹 다른 이름으로 DB를 복원하여 테스트등의 용도로 사용하고자 할때가 있습니다.

 

우선 백업된 DB의 논리적이름을 확인합니다.

 

Restore Filelistonly From Disk='C:\BackUp\<백업DB파일명>';

 

그런다음 아래 쿼리로 복원을 시도합니다.

 

Restore Database <복원하려는 DB>
From Disk='C:\BackUp\<백업된DB파일명>'
With
Move '<확인된 논리적DB이름>' To 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\<복원할DB파일명>.mdf',
Move '<확인된 논리적DB Log이름>' To 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\<복원할DB파일명>.ldf', Replace;

 

* DB경로는 필요에 따라 임의로 수정해야 합니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] 기본언어확인및 변경  (0) 2018.01.30
[SQL] 스키마(Schema)  (0) 2018.01.23
[SQL] 다른 이름으로 DB복원  (0) 2017.09.05
동적 쿼리 실행 예시 (sp_executesql)  (0) 2013.08.22
[SQL] CTE  (0) 2011.03.07
[SQL] 뷰(VIEW)  (0) 2011.03.04
0 0
1
블로그 이미지

클리엘