Witam Wszystkich, mam problem z kopiowaniem kolumn między tabelami. Chodzi o to, że mam dwie tabele Pracownicy i Wypłaty. Tabela Wypłaty składa się z IDPRAC, Pensji, premii i zarobków. Zależy mi na tym by pobrać dane ID i Pensja w tabeli Pracownicy i “wsadzić” to to tabeli Wypłaty do kolumn IDPRAC i PENSJA. Napisałem coś takiego w SQL Server:
INSERT INTO Wyplaty
(ID_PRAC, Pensja)
SELECT ID, Pensja
FROM szczegoly_o_Prac
I jeżeli to wywoluje to tworzy mi moją tabele z ściągnietymi wartościami ID i Pensją do Wypłaty. Ale to działa tylko pod SQL i za każdym razem muszę robić nowy Executing SQL. A mi zależy na tym by przy kliknięciu buttona Wypłaty na mojej formie i otwarciu Formy “Wypłaty” na DGV który się na niej znajduje automatycznie zostały pokazane wartości z Pracownicy. Czyli jak to zrobić pod C# (w kodzie) by pobierało dane z jednej tabeli do drugiej?
Cześć, chodzi mi tylko o to, że chcę z dwóch kolumn jednej tabeli wstawić dane do dwóch kolumn drugiej tabeli używając C#. Nie mam pojęcia jak to zrobić. Mi to bez różnicy czy będzie to 1 sposobem czy 2, byle mi to jakoś zadziałało. Jedno co mi się udało wymyśleć to ten fragment kodu SQL co tutaj wkleiłem. Jeżeli nie jasno się wyrażam to proszę pisz, a ja od razu wytłumaczę.
Jako parametr przekazujesz łańcuch połączenia ze swoją bazą danych. Generalnie taki powinien Ci zadziałać (wykorzystane zostanie uwierzytelnienie z użyciem Twojego konta Windows):
jasne, na ile będę mógł na tyle pomogę. Powiedz mi jeszcze jaką masz wersję tego SQL Servera. W sensie, czy jest to wersja Express, czy też jakaś inna?
W zdarzeniu Load formy podmień kolejność wykonywanych działań:
private void Wyplaty_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'szczeg_o_pracDataSet3.Wyplaty' table. You can move, or remove it, as needed.
int rowsAffected = GetPayment("Data Source=TOMEK-PC\SQLEXPRESS;Initial Catalog=szczeg_o_prac;Integrated Security=True;Pooling=False");
this.wyplatyTableAdapter.Fill(this.szczeg_o_pracDataSet3.Wyplaty);
}
nie no bez przesady … a co do tego drugiego “”. Niektóre znaki w C# uznawane są za znaki specjalne i jeśli są umieszczane w stringu to należy je poprzedzić właśnie “”, bo inaczej wystąpi wspomniany przez Ciebie wyżej błąd w trakcie kompilacji. Jest jeszcze jeden sposób jak sobie z tym poradzić, tj. przy użyciu operatora “@”, ale to już najwyżej sam sobie doczytasz.
co do tego dublowania … no bo masz tą metodę GetPayment wywoływaną przy każdym ładowaniu formy Wyplaty, Musisz ją umieścić w takim miejscu, żeby wywoływana była tylko raz. Ja nie wiem, gdzie najlepiej powinieneś to wrzucić, bo nie znam Twojego programu.
Najlepiej pisz na forum, bo jeśli nie ja pomogę to ktoś inny. Ewentualnie prywatna wiadomość też poprzez forum.
Swoją drogą, żeby poradzić sobie z tym dublowaniem w najłatwiejszy sposób, mógłbyś zrobić coś takiego:
w bazie danych umieść procedurę, która najpierw będzie czyścić całą tabelę Wyplaty i potem od razu wypełniać ją rekordami z tabeli szczegoly_o_Prac
w kodzie napisz metodę, która wywoła tą procedurę
wywołaj tą metodę najlepiej przy starcie aplikacji
Procedura mogłaby wyglądać następująco (musisz wywołać poniższy kod na bazie danych):
USE [TU_WSTAW_NAZWE_BAZY_DANYCH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetPayment
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Wyplaty
SET NOCOUNT OFF;
INSERT INTO Wyplaty (ID_PRAC, Pensja)
SELECT ID, Pensja
FROM szczegoly_o_Prac
END
GO
Wówczas nowa metoda w C# wywołująca tą procedurę wyglądałaby tak:
Ok wielkie dzięki, na pewno przyjże się temu ze szczególną uwagą :). Sorry, że nie odpisałem wcześniej, ale nie zauważyłem, że zrobiła się już następna strona.
Jeszcze raz wielkie dzięki
Pozdrawiam
Tomek
Bym zapomniał, ten kod w SQL to napisać w SQL Server czy jest możliwość w Visualu to wklepać?
Najlepiej wklep to w SQL Server Management Studio 2008 (jeśli tego nie masz to sobie ściągnij i zainstaluj, wersję Express można pobrać za free ze strony Microsoftu). W tym programiku klikasz prawym przyciskiem myszy na nazwę tej bazy danych, gdzie masz te tabele i wybierasz New Query. Otworzy się nowe okienko, w którym wklepujesz cały ten kod SQL, co wkleiłem wyżej i potem klikasz na przycisk Execute (taki z czerwonym wykrzyknikiem). Jeśli pojawi się komunikat “Command(s) completed successfully.” tzn, że kod zadziałał. Poza tym to nie ma za co
Nie wiem jak to zmienić (czyt. Nazwę tematu). Próbowałem i nie dałem rady.
– Dodane 12.07.2010 (Pn) 23:03 –
Cześć Matzu, zaglądasz jeszcze do tego wątku? Potrzebuje Twojej pomocy. Mam problem z usunięciem zaznaczonego wiersza w tabeli wypłaty, a robię tak samo jak w innych częściach swojego programu. Zaczyna mnie to już irytować. Jeżeli ktoś jest skłonny mi pomóc, to proszę pisać, a cały problem tutaj objaśnię.