Cześć! Mam pewien problem.
W dużym skrócie pobieram przez WCF dane o sprzęcie komputerowym użytkownika. Mam porobione encje (m.in.) DyskTwardy,Procesor, Pamiec
ilość zapytań może się różnić w zależności od ilości dysków twardych, a przynajmniej ja to tak projektuje, np. tabela DyskTwardy w bazie wygląda tak: (idZgloszenia, Nazwa_dysku, Pojemnosc, NumerSeryjny). Więc jeżeli ktoś ma 2 dyski twarde, to automatycznie wykonają się 2 zapytania
Problem mam następujący...
tutaj metoda która tworzy zapytania dla dysków twardych (jako parametry przyjmuje idZglsozenia i Listę dysków twardych)
public List<SqlCommand> PutHardDrives(int idZgloszenia, List<HardDrive> hdList)
{
var scList = new List<SqlCommand>();
foreach (var hd in hdList)
{
var sc = new SqlCommand();
sc.CommandText = "Insert into CompInfo_Hardrive Values (@idZgloszenia,@Model,@Size,@Serial)";
sc.Parameters.AddWithValue("@idZgloszenia", idZgloszenia);
sc.Parameters.AddWithValue("@Model", hd.Model);
sc.Parameters.AddWithValue("@Size", hd.Hdsize);
sc.Parameters.AddWithValue("@Serial", hd.SerialNumber);
scList.Add(sc);
}
return scList;
}
A tutaj kod który jest odpowiedzialny za transakcje (zbiera w kupe wszystkie zapytania i wykonuje transakcje, * bardziej szczegółowo: insertuje do bazy konkretne informacje do osobnych tabel, np. dane o dysku, o proscesorze, itd. wspólnym kluczem jest Id_zgloszenia *
using (SqlConnection polaczenie = new SqlConnection(ConnectionString))
{
polaczenie.Open();
using (SqlTransaction trans = polaczenie.BeginTransaction())
{
try
{
using (SqlCommand command = new SqlCommand("", polaczenie, trans))
{
command.CommandType = System.Data.CommandType.Text;
foreach (var commandQueries in ListOfQueriesForTrans)
{
command.CommandText = commandQueries.CommandText;
command.ExecuteNonQuery();
}
}
trans.Commit();
}
catch { trans.Rollback(); return false; } //nie udało się wykynać transakcji. nie trzeba rollbackować, bo dispose samo to zrobi, ale przynajmniej wiem co będzie cofane :)
}
return true;
}
Wygląda ok, ale problem w tym, ze te parametry się nie dodają. WIdzę to w trakcie debugowania - przechodzi do catcha już po pierwzsym command.ExecuteNonQuery();
:( :(
Podpowie ktoś coś?