[SQL] C # SQL 삽입 명령
SQLC # SQL 삽입 명령
사람이 나에게 기록이 더 나은 성능을 만들어 삽입하는 다음과 같은 두 가지 방법을 말할 수 있습니까?
사례 1
SqlCommand cmd = new SqlCommand();
for (int i = 0; i < 10000; i++)
{
cmd = new SqlCommand("insert into test(id, name) value('" + i + "', '" + i + "')");
cmd.ExecuteNonQuery();
}
사례 2
string sql = null;
for (int i = 0; i < 10000; i++)
{
sql += "insert into test(id, name) value('" + i + "', '" + i + "')";
}
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
해결법
-
==============================
1.첫째 : STOP 함께 당신의 SQL 코드을 연결! 이것은 SQL 주입을 공격 사방 해커에 초대합니다! 사용하는 대신 쿼리를 매개 변수화!
첫째 : STOP 함께 당신의 SQL 코드을 연결! 이것은 SQL 주입을 공격 사방 해커에 초대합니다! 사용하는 대신 쿼리를 매개 변수화!
나는이 솔루션을 사용하십시오 매개 변수화 쿼리 하나하는 SqlCommand를 만들고, 그 실행 :
string stmt = "INSERT INTO dbo.Test(id, name) VALUES(@ID, @Name)"; SqlCommand cmd = new SqlCommand(smt, _connection); cmd.Parameters.Add("@ID", SqlDbType.Int); cmd.Parameters.Add("@Name", SqlDbType.VarChar, 100); for (int i = 0; i < 10000; i++) { cmd.Parameters["@ID"].Value = i; cmd.Parameters["@Name"].Value = i.ToString(); cmd.ExecuteNonQuery(); }
또는 당신이 더 10'000 행 이상의 삽입하고, 특히, SqlBulkCopy의를 사용합니다.
-
==============================
2.두 번째 방법의 외모는 빠른 # 1보다 한 번에 삽입 명령을 보낼 수 있기 때문이다. 처음에 각 ExecuteNonQuery는 대한 SQL 서버에 왕복이있다.
두 번째 방법의 외모는 빠른 # 1보다 한 번에 삽입 명령을 보낼 수 있기 때문이다. 처음에 각 ExecuteNonQuery는 대한 SQL 서버에 왕복이있다.
그러나 명령 삽입 대량 시도해야합니다 : 대량 INSERT (Transact-SQL)를, 난 당신이 제공하는 옵션 중 하나보다 더 나은 성능을 얻을 것 같아요.
[]'에스
-
==============================
3.그대로, 어느 경우 작동하는지 정확히 알아야한다.
그대로, 어느 경우 작동하는지 정확히 알아야한다.
사례 # 1 지정할 수있는 연결이 필요합니다.
사례 # 2과 같이 여러 명령을 실행하기 위해 세미콜론 명령문을 종료하도록 요구합니다 :
string sql = null; for (int i = 0; i < 10000; i++) { sql += "insert into test(id, name) value('" + i + "', '" + i + "');"; } SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery();
당신은 단지 몇 천 행에 자신을 테스트하기 위해 궁극적으로 가장 좋은 방법은 될 것입니다. 내 생각뿐만 아니라 그것은 단지 하나의 SqlCommand 개체를 설정 필요하기 때문 사례 # 2는 성능을 위해 더 나은 될 것이라고 겠지만, 그것은 단지 데이터베이스를 하나의 시간을 안타.
-
==============================
4.나는 두 번째가 작동합니다 생각하지 않습니다.
나는 두 번째가 작동합니다 생각하지 않습니다.
이 하나의 INSERT 문에 여러 행을 삽입하는 SQL Server 2008의 구문은 그러나 내가 그 빨리 모두보다 당신이 제안한 옵션이 될 것이라고 생각 :
INSERT INTO test (id, name) VALUES ('1', 'foo'), ('2', 'bar'), ('3', 'baz') -- etc...
당신이 정말로 높은 성능을 원하는 경우 그러나, SqlBulkCopy의 클래스를 사용하는 것이 좋습니다.
-
==============================
5.단일 왕복으로 끝낼 때문에 두 번째는, 빠른 아마도. 매개 변수가있는 쿼리를 사용하지 않기 때문에 둘 다 똑같이 끔찍한 있습니다.
단일 왕복으로 끝낼 때문에 두 번째는, 빠른 아마도. 매개 변수가있는 쿼리를 사용하지 않기 때문에 둘 다 똑같이 끔찍한 있습니다.
from https://stackoverflow.com/questions/8218867/c-sharp-sql-insert-command by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 하나 개의 레코드에 SQL에 널 (null) 값으로 모든 필드를 계산하려면? (0) | 2020.05.25 |
---|---|
[SQL] 분할 문자열 행 오라클 SQL로 (0) | 2020.05.24 |
[SQL] 두 번째 필드를 자동 증가로 두 필드의 SQL 서버 고유 복합 키 (0) | 2020.05.24 |
[SQL] 동적으로 생성 된 테이블에서 엔티티 프레임 워크를 사용하여 데이터를 쿼리 (0) | 2020.05.24 |
[SQL] 제거 및 날짜 범위를 중복 감소 (0) | 2020.05.24 |