-2

単一の列Datatableがあり、sqlparametercollectionを使用してSQLwhere句でこのデータテーブルを渡したいです。助けてください。以下は私のコードです:

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;

    }`
4

2 に答える 2

1

SQL Server 2008以降を使用している場合は、テーブル値パラメーターを使用できます。

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;
于 2013-01-02T19:42:16.813 に答える
0

1 つの列がDataTableあり、すべての行を db-table に挿入するとします。簡単なアプローチ(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();
    }
}
于 2012-12-10T13:46:25.520 に答える