ADO NET C# как добавить коллекцию в базу данных? - PullRequest
0 голосов
/ 03 апреля 2020

У меня нет проблем, когда я добавляю только одну запись.

public int Add(Company Company)
        {
            var cmd = new SqlCommand("MD.CompanyAdd", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandTimeout = 0;

            try
            {
                conn.Open();

                cmd.Parameters.AddWithValue("@CompanyName", Company.CompanyName);
                cmd.Parameters.AddWithValue("@CompanyCode", Company.CompanyCode);
                cmd.Parameters.AddWithValue("@RateType", Company.RateType);

                var result = cmd.ExecuteScalar();

                //var result = cmd.ExecuteNonQuery();
                //var qwe = result.ToString();

                return int.Parse(result.ToString());
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception: " + ex.Message);
                throw;
            }
            finally
            {
                conn.Close();
            }
        }

Но я не понимаю, как я могу добавить коллекцию. Я думаю, что я должен сделать что-то с DataTable, но я не понимаю, что именно.

class CompanyRepository
    {
        private string _connectionString;
        private SqlConnection conn;

        public CompanyRepository(string ConnectionString)
        {
            _connectionString = ConnectionString;
            conn = new SqlConnection(_connectionString);
        }

        public void AddList(IList<Company> Companies)
        {
            try
            {
                conn.Open();

                var cmd = new SqlCommand("MD.CompanyAddList", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandTimeout = 0;

                DataTable dataTable = new DataTable();

                dataTable.Columns.Add("[CompanyCode]", typeof(string));
                dataTable.Columns.Add("[CompanyName]", typeof(string));
                dataTable.Columns.Add("[RateType]", typeof(string));


                foreach (var Company in Companies)
                {
                    dataTable.Rows.Add(Company);
                }

                cmd.Parameters.AddWithValue("@ImportTable", dataTable);

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception: " + ex.Message);
                throw;
            }
            finally
            {
                conn.Close();
            }
        }
    }

    public class Company 
    {
        public int CompanyId { get; set; } // CompanyID (Primary key)
        public string CompanyCode { get; set; } // CompanyCode (length: 10)
        public string CompanyName { get; set; } // CompanyName (length: 256)
        public int? RateType { get; set; } // RateType

    }

ПОМОГИТЕ мне, пожалуйста!

PS Пожалуйста, извините меня за спам, но сайт требует больше текста прежде чем я смогу создать пост. Надеюсь, этого будет достаточно.

1 Ответ

0 голосов
/ 03 апреля 2020

Я думаю, что это может работать.

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Id", typeof(string)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
foreach (Entry entry in entries)
   dt.Rows.Add(new string[] { entry.Id, entry.Name });

using (SqlBulkCopy bc = new SqlBulkCopy(connection))
{   // the following 3 lines might not be neccessary
    bc.DestinationTableName = "Entries";
    bc.ColumnMappings.Add("Id", "Id");
    bc.ColumnMappings.Add("Name", "Name");

    bc.WriteToServer(dt);
}

скопировано с здесь

...