csv 파일을 삽입 문으로 묶어 데이터베이스로 변환하는 작은 프로그램을 작성하고 있습니다. 프로그램에는 데이터베이스에 대한 지식이 없기 때문에 작성된 문장은 일회성 일 뿐이며 동적 일 수 없습니다.C#에서 sql 문 생성 - 새 테이블에 tabe 값을 삽입하십시오.
이제 각각의 데이터 세트에는 고유 한 GUID가 있으며 데이터베이스에 쿼리를 실행하여 데이터 세트가 존재하는지 여부를 확인합니다. 그래서 나는이 :
sw.WriteLine("-- Determine if dataset exists from school name");
sw.WriteLine(string.Format(
"INSERT INTO DataSets (Guid, DataSets) VALUES ('{0}', '{1}') WHERE NOT EXISTS (SELECT * FROM DataSets WHERE DataSetName = '{1}')",
Guid,
DataSetName
));
지금, 다음 문제는 데이터 세트에 대한 GUID가 다른 테이블의 일부에 사용되는 것입니다 (SQL 정말 내 장점되지 않습니다 내가 틀렸다면 수정하십시오) 같은 :
string sql = string.Format(
"INSERT INTO Table1 VALUES ('{0}', '{1}', '{2}', {3}, '{4}');",
object.value1
object.value1
object.value1
object.value1
Guid
'GUID를'하지만 C#에서 변수로 사용할 수 없습니다, 그것은 될 수 중 하나를 새 GUID (있는 경우 데이터베이스에 존재하지 않는 '데이터 세트') 또는 기존의 GUID (있는 경우 '데이터 세트'가 존재하며 기존 GUID 가져 오기)
그래서 다음과 같이 입력해야합니다 :
string sql = string.Format(
"INSERT INTO Table1 (Data1, Data2, Data3, Data4) VALUES ('{0}', '{1}', '{2}', {3});",
object.value1
object.value1
object.value1
object.value1
string sql2 = string.Format("INSERT INTO Table1 (Data5) VALUES (SELECT Guid FROM Datasets WHERE DataSetName = '{0}');
Guid
);
이 방법은 좋은 방법인가요?
SQL 인젝션 취약점이 있습니다. – SLaks
데이터를 삽입하기 전에 쉼표를 ''로 바꾸는 함수가 있습니다. 나는 여전히 더 많은 측정을하고 있지만이 코드를 실행하기 전에 데이터를 정리해야합니다. –
매개 변수를 사용해야합니다. – SLaks