Inserimento di una singola riga con un numero elevato di colonne in SQL Server

ado.net bulkinsert sqlbulkcopy sql-server

Domanda

Ho una forma enorme che ha circa 110 i campi colonne (riga singola) che devono essere salvate in un database.

Qual è l'approccio migliore per inserire queste molte colonne nel database utilizzando ADO.NET?

Non penso che dovrei usare una dichiarazione di inserimento come questa, poiché la query sarebbe molto grande a causa del numero di campi.

conn.Open();
string insertString = @"
    insert into Categories (CategoryName, Description)
    values ('Miscellaneous', 'Whatever doesn''t fit elsewhere')";

SqlCommand cmd = new SqlCommand(insertString, conn);
cmd.ExecuteNonQuery();

Penso di scaricare i dati in un file temporaneo e poi aggiungerli in un datatable e quindi inserirli nel database usando SqlBulkCopy.

C'è un approccio migliore? Come gestiresti questa situazione?

Risposta accettata

Temo che non ci sia una buona scorciatoia per inserire questo numero di colonne, ma l'utilizzo di parametri probabilmente risparmia un po 'di tempo per il debug. Utilizzando i parametri non devi preoccuparti di cose come gli apostrofi nelle stringhe e le conversioni di tipo. Ecco un esempio:

public static void TryThis()
{
  try
  {
    using  (SqlConnection  con = new SqlConnection())
    {
      con.ConnectionString = "YourConnectionString";
      con.Open();
      SqlCommand cmd = new SqlCommand();
      cmd.Connection = con;
      cmd.CommandType = CommandType.Text;
      cmd.CommandText = "INSERT INTO Categories (CategoryName, Description)  VALUES (@CategoryName, @Description)";
      cmd.Parameters.AddWithValue("CategoryName", "Miscellaneous");
      cmd.Parameters.AddWithValue("Description", "Whatever doesn't fit elsewhere");
    }
  }
  catch (Exception ex)
  {
    throw new Exception(ex.Message);
  }
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow