estoy tomando datos que se encuentra en una List
de Record
objetos y poner su contenido en una base de datos:C# SqlParameters Mano corto
// Processes a Record and adds it to the database
public bool addRecord(SqlConnection db, List<Record> recordsToAdd)
{
using (SqlCommand command = db.CreateCommand())
{
foreach (Record record in recordsToAdd)
{
// Set the query command text
command.CommandText = @"INSERT INTO SMDGROUP_STPRODMASTER (PRODCODE, TOTFREE, TOTPHYS, ITEMTYPE, PRODESC) VALUES ('@PRODCODE', '@TOTFREE', '@TOTPHYS', '@ITEMTYPE', '@PRODESC')";
SqlParameter param1 = new SqlParameter("@CURSTAT", record.curstat);
SqlParameter param2 = new SqlParameter("@ITEMDESC", record.itemdesc);
SqlParameter param3 = new SqlParameter("@PRODCODE", record.prodcode);
SqlParameter param4 = new SqlParameter("@TOTFREE", record.totfree);
SqlParameter param5 = new SqlParameter("@TOTPHYS", record.totphys);
SqlParameter param6 = new SqlParameter("@ITEMTYPE", record.itemtype);
SqlParameter param7 = new SqlParameter("@PRODESC", record.proddesc);
command.Parameters.Add(param1);
command.Parameters.Add(param2);
command.Parameters.Add(param3);
command.Parameters.Add(param4);
command.Parameters.Add(param5);
command.Parameters.Add(param6);
command.Parameters.Add(param7);
// Execute the query
command.ExecuteNonQuery();
}
return true;
}
}
Aquí está mi clase Record:
class Record
{
public string curstat { get; set; }
public string itemtype { get; set; }
public string itemdesc { get; set; }
public string prodcode { get; set; }
public string proddesc { get; set; }
public string totfree { get; set; }
public string totphys { get; set; }
}
Sólo a partir de mirando el código, tengo la sensación de que hay una forma más corta de lograr esto.
Pero en segundo lugar, ni siquiera estoy seguro de haberlo hecho correctamente, de que los valores @PARAMETER
están siendo reemplazados.
Si veo el contenido de command
, todavía muestra la cadena de consulta con los parámetros @
.
Además, estoy recibiendo este error en command.ExecuteNonQuery()
:
Cadena o datos binarios podrían truncarse.
La declaración ha finalizado.
Por lo tanto, mis preguntas son:
- ¿Hay un camino más corto para establecer y añadir varios parámetros a la consulta?
- ¿Qué podría estar causando el error?
¿Cuál es la definición de su tipo de registro? –
El error probablemente se deba a que intenta insertar datos en una columna que no es lo suficientemente grande como para almacenarlo. Por ejemplo, tratar de almacenar 'abcdef' en un' varchar (5) 'causaría este error. –
¡He agregado la clase a la pregunta ahora, gracias! – Luke