2011-01-28 91 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#」之類的東西。這就是標籤的用途。 – 2011-01-28 02:57:14

+0

原諒我...... – yonan2236 2011-01-28 03:23:19

回答

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() 
    } 
相關問題