2013-09-26 2 views
0

TxtFirstName, TxtMiddleNameTxtLastName이라는 3 개의 텍스트 상자가 있습니다. 내 열 이름이 단지 FullName 인 데이터베이스에이 정보를 삽입하고 싶습니다. 내 3 정보를 결합하여 하나에 삽입하려고합니다. 내가 한 일은 다음과 같습니다.데이터베이스에 데이터를 삽입 할 때 오류가 발생했습니다.

string _fullname = _lastname + "," + _firstname + middlename; 
cmd = new SqlCommand("INSERT INTO TableVote (FullName) VALUES ('" + _fullname + "')", sc); 

하지만 오류가 발생하는 것 같습니다. "문자열 또는 이진 데이터가 잘립니다. 문이 종료되었습니다."

어떻게 수정합니까?

+3

** 경고 ** 귀하의 코드는 SQL injection 공격에 취약합니다! –

+0

전체 이름 열이 문자열 길이를 지원할 수있을만큼 길어야합니다. –

+0

미안하지만 아직 프로그래밍에 익숙하지 않습니다. SQL injection을 방지하려면 어떻게해야합니까? –

답변

4

오류는 문자열이 열에 허용 된 최대 길이보다 긴 것을 의미합니다. 더 긴 값을 허용하거나 삽입 한 값을 자르려면 스키마를 조정해야합니다.

또한 : SQL 주입 공격에 최대 읽기

cmd = new SqlCommand("INSERT INTO TableVote (FullName) VALUES (@fullname)"); 
cmd.Parameters.AddWithValue("@fullname", _fullname); 

: 당신은 정말 매개 변수화 명령을 사용해야합니다.

업데이트 : 다른 사람에 의해 언급 한 바와 같이 당신은 (다른 열 이름을 저장 숙고해야 즉 FirstName, MiddleName, LastName 그렇지 않으면 (예를 들어, 가장 일반적인 통계를 만들기 시도 다시 계산하기 힘들 것입니다 정보를 멀리 던져. 스키마와 중간 이름).으로

+0

이 ChrisWue 주셔서 감사합니다, 정말 고마워. 그리고 네, 매개 변수화 된 명령을 연습합니다 :) –

0

이미. 당신이 당신의 테이블에 삽입 된 값이 열 사양 너무 긴 지적 그러나이

,321 0 저는 데이터베이스에 대해 꽤 오랫동안 작업 해 왔으며 이름을 모두 한 칸에 저장하지 말 것을 권합니다. 나는 이것을 계속해서 반복적으로 보았다. 당시에는 좋은 생각 이었지만 빠른 시일 내에 생각했지만, 조만간 그 이름의 일부를 얻을 필요가있는 요구 사항을 갖게 될 것입니다. 그 시점에 도달하면 이름은 언어와 문화에 크게 의존하는 매우 복잡하고 복잡한 문제이기 때문에 모든 종류의 문제를 발견하게 될 것입니다. 전체 이름 목록이 주어지면 성을 어떻게 파싱할지 생각해보십시오. 처음에는 두 개의 성 (예 : Harper-Smith)을 가진 사람들, 다른 문화의 성 ("St. James", "O'Connell", "Van 벽 등 ") 등.

세 개의 열에 세 부분으로 이름을 저장하면 많은 시간이 걸리지 않으며 나중에 많은 문제를 줄일 수 있습니다.

관련 문제