Witam wszystkich forumowiczów.
Moja aplikacja ma za zadanie usuwać pliki z dysku ze wskazanego przez użytkownika katalogu.
Program napisany jest w Visual C# i łączy się z baządanych na serwerze SQL Server 2005. Aplikacja po podaniuniu przez użytkownika ścieżki do folderu z plikami zbiera informacje o plikach (Nazwa, lokalizacja, Rozszerzenie, Data modyfikacji). Jeśli data modyfikacji plików jest różna od daty dzisiejszej to dane o tych plikach wysyłane są do tabeli Pliki. Program następnie powinien czytać nazwy plików do usunięcia z tabeli Pliki i usuwać je z dysku. Właśnie tu mam problem jak zczytać dane z bazy z powrotem do aplikacji. W tabeli Histria_sesji do każdego usuwanego pliku umieszczać powinien flagę. Zależnie czy plik został już ususnięty czy nie. Ostatnim krokiem jest usunięcie rekordów dotyczących plików już usuniętych z dysku w bazie (czyli te pliki, które mają flagę ustawioną na wartość true w rekordzie Usuniety).
poniżej kod programu.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
namespace Usuwacz
{
public partial class Form1 : Form
{
public string connectionString;
public SqlConnection polaczenie;
public SqlCommand komenda;
public Form1()
{
InitializeComponent();
//connectionString = "server = SQL2K5\\PROJEKT_BAZ; uid = WSKIZ_EDU\\16104; database = Usuwacz; Integrated Security = True"; //serwer na uczelni
connectionString = "server = PPP-4X3UTSO8HER\\SQLEXPRESS; uid = Destro; database = Usuwacz; Integrated Security = True"; //mój serwer
polaczenie = new SqlConnection(connectionString);//obiekt połączenie z konstruktorem
polaczenie.Open();
komenda = new SqlCommand();
string commandString = "Select Nazwa_pliku, Lokalizacja, Rozszerzenie, Data_modyfikacji From Pliki";
SqlDataAdapter DataAdapter = new SqlDataAdapter(commandString, connectionString);
DataSet DataSet = new DataSet( );
DataAdapter.Fill(DataSet, "Pliki");
}
/*private void timer1_Tick(object sender, EventArgs e)
{
data_dzis = DateTime.Now.ToLongTimeString();
}*/
private void usuwanieToolStripMenuItem_Click(object sender, EventArgs e)//sprawdz();
{
//pobierz info, następnie wyślij wynik do Bazy Danych(nazwa i data pliku)
//usun_rozmyte() Delete
string sciezka = textBox1.Text;
if (sciezka != null) //sprawdzenie czy ścieżka została podana
{
string[] worek = new string[100]; // obiekt tymczasowo przechowuje wszystkie dane o plikach
worek = Directory.GetFiles(sciezka);
string data_modyf, data_dzis; // rozszerzenie
string komendasql = "INSERT INTO Pliki (Nazwa_pliku, Lokalizacja, Data_modyfikacji) Values(@Nazwa_Pliku, @Lokalizacja, @Data_modyfikacji)";//z worka do bazy
komenda.CommandText = komendasql;
komenda.Connection = polaczenie;
komenda.Parameters.Add("@Nazwa_Pliku", SqlDbType.NChar);
komenda.Parameters.Add("@Lokalizacja", SqlDbType.NChar);
komenda.Parameters.Add("@Data_modyfikacji", SqlDbType.DateTime); //komenda.Parameters.Add("@Rozszerzenie", SqlDbType.NChar);
foreach (string plik in worek)
{
data_modyf = File.GetLastWriteTime(sciezka).ToString("yyyy-M-dd");
data_dzis = DateTime.Now.ToShortDateString();
/*string nazwa_pliku, rozszerzenie;
rozszerzenie = nazwa_pliku.Remove(); //roz=nazwa_pliku - 4znaki 0d lewej; nazwa_pliku = plik - sciezka; nazwa_p = plik - rozszerzenie;
//int l_sciezka = nazwa_pliku.IndexOf(" ");
nazwa_pliku = nazwa_pliku.TrimEnd(new char [] { '.', '\\' });*/
if (data_modyf != data_dzis)
{
komenda.Parameters["@Nazwa_Pliku"].Value = plik;
komenda.Parameters["@Lokalizacja"].Value = sciezka;
komenda.Parameters["@Data_modyfikacji"].Value = data_modyf;
//komenda.Parameters["@Rozszerzenie"].Value = rozszerzenie;
//komenda.ExecuteNonQuery();
}
else
{
MessageBox.Show("Nie ma plików do usunięcia", "pasek tytułu", MessageBoxButtons.OK, MessageBoxIcon.Information); //" Nie ma plików do usunięcia"
}
}
string komendasql1 = "Select Nazwa_pliku From Pliki Order by Nazwa_pliku";
komenda.CommandText = komendasql1;
SqlDataReader czytaj_bd = komenda.ExecuteReader(CommandBehavior.CloseConnection);
while (czytaj_bd.Read())
{
string stary_plik = czytaj_bd.ToString(); // pierwsza zwrócona kolumna
File.Delete(stary_plik); // usuwanie stary_plik z dysku
string komendasql2 = "INSERT INTO Historia_sesji (Id_sesji, Skonczone, Trwające) Values (@Id_sesji, @Skonczone, @Trwajace)"; // "logowamie" czynność do Historia_sesji
komenda.CommandText = komendasql2;
int Nr_sesji = 0;
bool usuniety = false;
bool do_usuniecia = false;
if (stary_plik != null)
{
komenda.Parameters.Add("@Id_sesji", SqlDbType.NChar); //komenda.Parameters.["@Id_sesji"].Value = Nr_sesji;
komenda.Parameters.Add("@Skonczone", SqlDbType.Bit);
komenda.Parameters["@Id_Sesji"].Value = Nr_sesji;
usuniety = true;
komenda.Parameters["@Skonczone"].Value = usuniety;
//komenda.ExecuteNonQuery();
}
else
{
komenda.Parameters.Add("@Id_sesji", SqlDbType.NChar);
komenda.Parameters.Add("@Trwające", SqlDbType.Bit);
komenda.Parameters["@Id_Sesji"].Value = Nr_sesji;
do_usuniecia = true;
komenda.Parameters["@Trwające"].Value = do_usuniecia;
//komenda.ExecuteNonQuery();
}
}
{
//progressBar1.PreformStep(); //zwiększenie o jeden krok
if (progressBar1.Value == progressBar1.Maximum) //jeżeli dojdzie do końca skali to pojawi się komunikat
MessageBox.Show("Pliki usuniete.", "pasek tytułu", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Podana scieżka nie istnieje.", "pasek tytułu", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void zakończToolStripMenuItem_Click(object sender, EventArgs e)
{
Close(); //Koniec pracy programu
}
}
}
Zapytania SQL:
USE [Usuwacz]
GO
/****** Object: Table [dbo].[Historia_sesji] Script Date: 06/22/2009 20:52:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Historia_sesji](
[Id_sesji] [nchar](250) NOT NULL,
[Skonczone] [bit] NULL,
[Trwajace] [bit] NULL
) ON [PRIMARY]
GO
USE [Usuwacz]
GO
/****** Object: Table [dbo].[Pliki] Script Date: 06/22/2009 20:51:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Pliki](
[Nazwa_pliku] [nchar](250) NOT NULL,
[Rozszerzenie] [nchar](40) NULL,
[Lokalizacja] [nchar](200) NULL,
[Data_modyfikacji] [datetime] NULL,
CONSTRAINT [PK_Pliki] PRIMARY KEY CLUSTERED
(
[Nazwa_pliku] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO