Biorę dane, które znajduje się w List
z Record
obiektów i umieszczenie ich zawartość do bazy danych:C# SqlParameters Krótki Ręcznie
// 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;
}
}
Oto moja klasa rekord:
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; }
}
Już od patrząc na kod, mam wrażenie, że istnieje krótszy sposób osiągnięcia tego.
Ale po drugie, nie jestem nawet pewien, czy zrobiłem to poprawnie, że wartości @PARAMETER
są wymieniane.
Jeśli wyświetlana jest zawartość command
, nadal wyświetla ciąg zapytania z parametrami @
.
Również ja dostaję ten błąd na command.ExecuteNonQuery()
:
String lub dane binarne zostaną obcięte.
Oświadczenie zostało wypowiedziane.
Więc moje pytania to:
- Czy istnieje krótsza droga do ustawiania wielu parametrów i dodać do zapytania?
- Co może być przyczyną błędu?
Jaka jest definicja Twojego typu rekordu? –
Błąd jest prawdopodobnie spowodowany próbą wstawienia danych do kolumny, która nie jest wystarczająco duża, aby ją zapisać. Na przykład próba przechowania 'abcdef' w' varchar (5) 'spowodowałaby ten błąd. –
Dodałem teraz klasę do pytania, dziękuję! – Luke