Wątek przeniesiony 2018-01-14 16:21 z C# i .NET przez somekind.

Zamiana string na int

0

cześć
Chciałem sprawdzić czy podany przez nas numer seryjny znajduje się w bazie danych. Wymyśliłem że najprościej jest zliczyć przez COUNT czy jest taki numer,

string sql1 = 
"SELECT COUNT (numerSeryjny) FROM NumerySeryjne WHERE numerSeryjny =" + tbnumerSeryjny .Text + "";

Problem mam ze zamianą zmiennej typu string na int :(. Próbowałem w taki sposób:

int sql2 = Int32.Parse(sql1);
int sql2 = Convert.ToInt32(sql1);
int sql2 = System.Convert.ToInt32(sql1);
int sql2 = int.Parse(sql1);

int sql2;
int.TryParse(sql1, out sql2);
sql2 = Convert.ToInt32(sql1);

Pojawia się taki komunikat: Input string was not in a correct format.
Jak bym uzyskał wartość sql2 to bym użył if'a do sprawdzenia

  if (sql2 > 0)
                {
                    MessageBox.Show("Numer seryjny już istnieje w bazie danych");
                }
                else
                {
Dodajdobazy();
                }

Proszę o pomoc

0

A wykonałeś w ogóle to zapytanie? :D

0

tak, zliczyło mi

nawet jak zapytanie będzie wyglądać w taki sposób:

string sql1 = 
"SELECT COUNT (numerSeryjny) AS Expr1  FROM NumerySeryjne WHERE numerSeryjny =" + tbnumerSeryjny .Text + "";

Dalej wywala ten sam błąd

0

Masz w zapytaniu spację między tbNumerSeryjny, a .Text. To błąd przepisywania czy w oryginale też się trafił taki kudłacz?

Druga sprawa, podepnij debugger i zwyczajnie zajrzyj co trafia do zmiennej, bo możesz tam mieć tysiąc i jeden rodzaj bzdur, jeśli zapytanie gdzieś jest trafione :)

1

@Klojtex: ta spacja nie ma znaczenia.
@przonak007 to zapytanie NAJPIERW trzeba wykonać. Nie wystarczy go napisać - trzeba się połączyć z bazą danych i na niej wykonać zapytanie SQL i dopiero wtedy możesz odczytać wynik.
Poczytaj:
https://www.dotnetperls.com/sqlconnection
https://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C

0

Faktycznie wyleciało mi to z głowy. Skupiłem się na zapytanie sql.
Teraz wyskakuje błąd :
Error 1 The name 'sql3' does not exist in the current context

string sql1 = "SELECT COUNT (numerSeryjny) AS Expr1  FROM NumerySeryjne WHERE numerSeryjny =" + tbnumerSeryjny .Text + "";

                OleDbConnection con1 = new OleDbConnection(connectingstring);
                OleDbCommand cmd1 = new OleDbCommand(sql1, con1);

                con1.Open();

                OleDbDataReader myreader1 = cmd1.ExecuteReader();
                OleDbDataReader myreader2;

                while (myreader1.Read())
                {
                    string sql2 = myreader1.GetString(1);
                    int sql3 = Convert.ToInt32(sql2);

                }
 if (sql3 > 0)
                {
                    MessageBox.Show("Numer seryjny już istnieje w bazie danych");
                }
                else
                {
Dodajdobazy();
                }
}
0

Zmienna sql3 istnieje tylko wewnątrz pętli while, bo tam ją zadeklarowałeś.

Raczej:

int sql3 = 0;
while (myreader1.Read())
{
    string sql2 = myreader1.GetString(1);
    sql3 = Convert.ToInt32(sql2);
}

if (sql3 > 0)
// ...
0

teraz w

OleDbDataReader myreader1 = cmd1.ExecuteReader();

wywala błąd: Nieodpowiedni typ danych w wyrażeniu kryterium.

0

ten sam błąd występuje gdy robię:

using (var conn = new OleDbConnection(connectingstring))
                {
                    using (var cmd1 = new OleDbCommand(sql1, conn))
                    {
                        conn.Open();
                        sql3 = (int)cmd1.ExecuteScalar();
                    }
                }
0

Numer seryjny w bazie zapewie jest typem tekstowym, więc powinieneś jego wartość podać w apostrofach, aby SQL rozumiał go jako tekst.

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