2012-12-10 2 views
-3

단일 열 Datatable을 가지고 있는데이 sqlparametercollection을 사용하여 SQL where 절에이 datatable을 전달하려고합니다. 도와주세요. 당신이 DataTable 하나 열이하고 DB 테이블에서 모든 행을 삽입 할 것을 가정항목 전달 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

: 은 아래에있는 내 코드입니다. (또한 RDBMS와 같은 SQL-Server를 가정) 간단한 방법 :

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(); 
    } 
}