2011-01-28 3 views
0

가정하자 나는이 다음과 같은 구조 :DataTable을 SQL 문 (INSERT)에 전달할 수 있습니까?

SQL 표

[Person Table] 
----------------------------------- 
Name | Gender | Age 
----------------------------------- 
    |  | 

ADO.Net 내 코드 감안할 때

[DataTable] 
-------------------------------- 
Name | Gender | Age 
-------------------------------- 
John | M  | 18 
Peter| M  | 20 

:

SqlConnection conn = getConnection(); 
SqlCommand cmd = new SqlCommand("INSERT INTO Person VALUES(@Name, @Gender, @Age)", conn); 
conn.Open(); 

... 

내 전체 DataTable을 프로그램의 매개 변수로 전달하는 방법이 있습니까?

감사합니다.

+0

제목에 "C#"과 같은 것을 포함시킬 필요가 없습니다. 그것이 바로 태그가있는 것입니다. –

+0

나를 용서해라 ...... – yonan2236

답변

2
string insertFields = ""; 
string insertValues = ""; 
     foreach (DataColumn col in dt.Columns) 
     { 
      insertFields += col.ColumnName + ","; 
      insertValues += "@" + col.ColumnName + ","; 
     } 
//chop off ending comma here with substring. 

string sql = "INSERT into T " + insertFields + " VALUES(" + insertValues + ")"; 


    foreach(DataRow dr in dt.Rows) 
    { 
     List<SqlParameter> sqlParams = new List<SqlParameter>; 
     foreach (DataColumn col in dt.Columns) 
     { 
      sqlParams.Add(new SqlParameter(col.ColumnName, dr[col.ColumnName])); 
     } 
     //Execute cmd with sqlparams. May need to set property as sqlParams.ToArray() 
    } 
+2

** YIKES !! ** SQL INSERT 문을 연결하는 것 .... 문은 SQL 주입 공격을위한 ** 열린 상태 **이다. 매개 변수화 된 쿼리를 사용하십시오! –

+3

그것은 매개 변수화 된 쿼리 인 것 같습니다. – Vikneshwar