2012-12-10 20 views
-3

我有一個單列Datatable,我想在SQL where子句中使用sqlparametercollection傳遞此數據表。請幫忙。下面 是我的代碼:將項目從DataTable傳遞到SQL Where條款c#

public DataTable getCatsByDepts(DataTable _Depts) 
    { 

     SqlConnection conn = new SqlConnection("Server=ax12d;Database=DemoDataAx;Trusted_Connection=True;"); 
     SqlCommand cmd = new SqlCommand("Select Level2 as Category from Mtq_RetailHierarchy Where Level1 IN (@Depts)", conn); 
     foreach (DataRow row in _Depts.Rows) 
     { 
      cmd.Parameters.Clear(); 
      cmd.Parameters.AddWithValue("Department", row.Field<string>("Department")); 
      //cmd.ExecuteNonQuery(); 
     } 


     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable SelectedCatsData = new DataTable(); 
     da.Fill(SelectedCatsData); 
     return SelectedCatsData; 

    }` 

回答

0

如果你使用SQL Server 2008或更高版本可以使用Table Valued Parameter

SqlConnection conn = new SqlConnection("Server=ax12d;Database=DemoDataAx;Trusted_Connection=True;"); 

SqlCommand cmd = new SqlCommand(@"Select Level2 as Category 
            from Mtq_RetailHierarchy 
            Where Level1 IN (SELECT Department 
                From @Depts)", conn); 

cmd.Parameters.Clear(); 
SqlParameter param cmd.Parameters.AddWithValue("@Depts", _Depts); 
param.SqlDbType = SqlDbType.Structured; 
param.TypeName = "dbo.Departments"; //This can either be a table or a User Defined Type 


SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataTable SelectedCatsData = new DataTable(); 
da.Fill(SelectedCatsData); 
return SelectedCatsData; 
0

假設你有一個DataTable列,要插入所有行的在db表。一個簡單的方法(也假設的SQL Server作爲RDBMS):

using(var con= new SqlConnection(connectionString)) 
using(var insertCommand = new SqlCommand("INSERT INTO dbo.Table VALUES(@Colname)", con)) 
{ 
    con.Open(); 
    foreach(DataRow row in table.Rows) 
    { 
     insertCommand.Parameters.Clear(); 
     insertCommand.Parameters.AddWithValue("Colname", row.Field<string>("Colname")); 
     insertCommand.ExecuteNonQuery(); 
    } 
}