Wątek przeniesiony 2014-01-29 00:08 z C# i .NET przez somekind.

Zabezpieczenie przed wczytaniem pustych kolumn

0

Witam mam problem z zabezpieczeniem kolumny przed wczytaniem pustych pól.
Kod bez problemu wczytuje mi numer. który podaje np.: podaje 1313 to w liście pojawia się numer z imieniem i nazwiskiem pracownika. Gdy podam jakiś zmyślony numer np. 1312, którego NIE MA w bazie danych to pojawią się puste kolumny. Chciałbym żeby zamiast tych kolumn pojawiał się komunikat "Baza jest pusta!, wprowadź poprawny numer pracownika!". Myślałem o czymś takim, ale to nic nie daje :

If ("numer_pracownika" == null)
{
MessageBox.Show("Baza jest pusta!, wprowadź poprawny numer pracownika!");
}
Else
{//reszta kodu
private void button_Wyszukaj_Click(object sender, EventArgs e)
{
DataView dv = new DataView();
SqlCeConnection conn = new SqlCeConnection(connString);
{
conn.Open();
string s1 = "SELECT numer_pracownika as [numer pracownika], imie_pracownika as [imie pracownika], nazwisko_pracownika as [nazwisko pracownika] WHERE numer_pracownika = '" + this.NumerPracownika.Text + "'";
SqlCeDataAdapter a = new SqlCeDataAdapter(s1, conn);
{
If ("numer_pracownika" == null)
{
MessageBox.Show("Baza jest pusta!, wprowadź poprawny numer pracownika!");
}
Else
{

DataTable dt = new DataTable();
a.Fill(dt);
dataGridView1.DataSource = dv = dt.DefaultView;
}
connection.Close();
}
}
}
}

0

To chyba oczywiste, że ten warunek:
If ("numer_pracownika" == null)
nigdy nie będzie spełniony.
Jakim cudem zdefiniowany przez Ciebie literał: "numer_pracownika" miałby nie mieć wartości, skoro jest sam go właśnie zdefiniowałeś?

To, co możesz zrobić, to np.:

  1. Sprawdzić, czy dt.Rows.Count jest równe 0.
  2. Przed wykonaniem zapytania select wykonać count na tych samych warunkach (poprzez metodę SqlCeCommand.ExecuteScalar) i sprawdzić, czy zwróci wartość większą niż 0.
0

Dziękuje za radę, wykonałem coś takiego i wyskakuje błąd:

"An unhandled exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll".

string s0 = "SELECT COUNT(numer_pracownika) AS numer pracownika FROM pracownicy WHERE numer_pracownika = '" + this.NumerPracownika.Text + "'";
SqlCeCommand command = new SqlCeCommand(s0, conn);
int count = (int)command.ExecuteScalar();//--> Błąd wyskakuje tu 
if (count == null)
{
MessageBox.Show("Wprowadz poprawny numer pracownika");
}
else
{

Cały kod wygląda tak:

private void button_Wyszukaj_Click(object sender, EventArgs e)
{
DataView dv = new DataView();
SqlCeConnection conn = new SqlCeConnection(connString);
{
conn.Open();
string s0 = "SELECT COUNT(numer_pracownika) AS numer pracownika FROM pracownicy WHERE numer_pracownika = '" + this.NumerPracownika.Text + "'";
SqlCeCommand command = new SqlCeCommand(s0, conn);
int count = (int)command.ExecuteScalar();
if (count == null)
{
MessageBox.Show("Wprowadz poprawny numer pracownika");
}
else
{
string s1 = "SELECT numer_pracownika as [numer pracownika], imie_pracownika as [imie pracownika], nazwisko_pracownika as [nazwisko pracownika] From pracownicy WHERE numer_pracownika = '" + this.NumerPracownika.Text + "'";
SqlCeDataAdapter a = new SqlCeDataAdapter(s1, conn);
{
DataTable dt = new DataTable();
a.Fill(dt);
dataGridView1.DataSource = dv = dt.DefaultView;
}
connection.Close();
}
}
}
}

dodanie znacznika <code> dla treści błędu - fp

0

Zle zapytanie SQL. Piszesz 'as numer pracownika..' niedozwolony syntax. Nie mozesz tam miec spacji. Ewentualnie 'as numerPracownika'.
I taka mala rada - kopiuj sobie swoje selecty i wrzucaj do management studio. Czy innego GUI DB. Server wskaze bledy w zapytaniu.
i posluchaj rady @somekind - server nie powinie zwrocic NULL tylko rows=0.

0

Dziękuje @miroS i @somekind za pomoc wszystko działa :). Wystarczyło jeszcze z null zrobić 0 :). Jeszcze raz dzięki :)

0 użytkowników online, w tym zalogowanych: 0, gości: 0