C# – Actualizarea tabelului SQL (Programare, C#, Sql, Server Sql, Actualizare Sql)

MansNotHot a intrebat.
a intrebat.

Vreau să actualizez tabelul meu sql. Am căutat aici și am găsit soluții despre cum să merg pe această problemă. Dar, din păcate, pur și simplu nu vrea să actualizeze baza de date. Nu am nici un indiciu care este problema. am verificat la comanda sql de câteva ori pentru greșeli de scriere dar nu am găsit niciuna sau le-am fixat dar tot din păcate nimic. Presupun că este ceva în cadrul blocului try dar nu pot găsi.

Acesta este codul meu:

string connetionString = null;
SqlConnection connection;
SqlCommand command;
string sql = null;
SqlDataReader dataReader;
connetionString = "Data Source=xxx\xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx";
sql = "UPDATE Employees SET LastName = '" + Lnamestring + "', FirstName = '" + Fnamestring + "', Title = '" + Titelstring + "', TitleOfCourtesy = '" + ToCstring + "', BirthDate = '" + Birthdatestring + "', HireDate = '" + Hiredatestring + "', Address = '" + Adressstring + "', City = '" + Citystring + "', Region = '" + Regionstring + "', PostalCode = '" + Postalstring + "', Country = '" + Countrystring + "', HomePhone = '" + Phonestring + "', Extension = '" + Extensionsstring + "', Notes = '" + Notesstring + "', ReportsTo = '" + ReportTostring + "' WHERE EmployeeID = '" + IDstring + "'; ";
connection = new SqlConnection(connetionString);
try
{
    connection.Open();
    command = new SqlCommand(sql, connection);
    SqlDataAdapter sqlDataAdap = new SqlDataAdapter(command);

    command.Dispose();
    connection.Close();
    MessageBox.Show("workd ! ");

}
catch (Exception ex)
{
    MessageBox.Show("Can not open connection ! ");
}

Sper că cineva mă poate ajuta să găsesc greșeala mea.

EDIT: când îl încerc pare să funcționeze, deoarece fereastra apare cu „workd” dar baza de date este neschimbată.

Comentarii

  • Ce se întâmplă mai exact? Se produce o eroare? P.S Utilizați Utilizarea declarației Using Statement P.P.S Utilizați parametrizarea –  > Por IronAces.
  • tocmai am editat-o în partea de jos –  > Por MansNotHot.
  • vă rugăm să folosiți SqlCommandParameters în loc de string concat -.  > Por rene.
  • nu executați comanda, nicidecum. –  > Por rene.
  • încercați cu command.ExecuteNonQuery(); înainte de command.Dispose(); –  > Por Nino.
4 răspunsuri
Zohar Peled

După cum a scris Michał Turczyn în răspunsul său, aveți unele probleme cu codul dvs.
Sunt de acord cu tot ceea ce a scris, dar m-am gândit că ai putea beneficia de a vedea cum ar trebui să arate codul tău – așa că iată-l:

var connetionString = "Data Source=EVOPC18\PMSMART;Initial Catalog=NORTHWND;User ID=test;Password=test";
var sql = "UPDATE Employees SET LastName = @LastName, FirstName = @FirstName, Title = @Title ... ";// repeat for all variables
try
{
    using(var connection = new SqlConnection(connetionString))
    {
        using(var command = new SqlCommand(sql, connection))
        {
            command.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = Lnamestring;
            command.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = Fnamestring;
            command.Parameters.Add("@Title", SqlDbType.NVarChar).Value = Titelstring;
            // repeat for all variables....
            connection.Open();
            command.ExecuteNonQuery();
        }       
    }
}
catch (Exception e)
{
    MessageBox.Show($"Failed to update. Error message: {e.Message}");
}

Comentarii

  • Mulțumesc, a funcționat de minune și da, a fost foarte util să văd cum a fost gândit. Pentru că im coding în C# de două zile acum 🙂 –  > Por MansNotHot.
Michał Turczyn

Câteva probleme cu codul tău:

1) Utilizați using, , atunci când se lucrează cu IDisposable obiecte, în cazul dvs. connection și command.

2) După cum se sugerează în comentarii, utilizați SqlCommandParameters în loc de concatenarea șirurilor de caractere din motive de securitate (căutați pe Google „preventing from SQL injections”)

3) Nu executați interogarea! Cum vrei să aibă impact dacă nu o faci? Există, de exemplu, o metodă precum ExecuteNonQuery în SqlCommand class.

Rawitas Krungkaew
string connetionString = null;
SqlConnection connection;
SqlCommand command;
string sql = null;
SqlDataReader dataReader;
connetionString = "Data Source=EVOPC18\PMSMART;Initial Catalog=NORTHWND;User ID=test;Password=test";
sql = "UPDATE Employees SET LastName = '" + Lnamestring + "', FirstName = '" + Fnamestring + "', Title = '" + Titelstring + "', TitleOfCourtesy = '" + ToCstring + "', BirthDate = '" + Birthdatestring + "', HireDate = '" + Hiredatestring + "', Address = '" + Adressstring + "', City = '" + Citystring + "', Region = '" + Regionstring + "', PostalCode = '" + Postalstring + "', Country = '" + Countrystring + "', HomePhone = '" + Phonestring + "', Extension = '" + Extensionsstring + "', Notes = '" + Notesstring + "', ReportsTo = '" + ReportTostring + "' WHERE EmployeeID = '" + IDstring + "'; ";
connection = new SqlConnection(connetionString);
try
{
    connection.Open();
    command = new SqlCommand(sql, connection);
    SqlDataAdapter sqlDataAdap = new SqlDataAdapter(command);

    command.ExecuteNonQuery();

    command.Dispose();
    connection.Close();
    MessageBox.Show("workd ! ");

}
catch (Exception ex)
{
    MessageBox.Show("Can not open connection ! ");
}
  1. Nu uitați să executați comanda
  2. Încercați să obțineți stacktrace sau mesajul de eroare de la Exception cât mai mult posibil. De exemplu: MessageBox.Show($"Can not open connection ! {e.GetBaseException().Message}, {e.StackTrace}");

saravanan

Vă rugăm să utilizați ExecuteNonQuery() în loc de SqlDataAdapter:

connection.Open();
command = new SqlCommand(sql, connection);
command.ExecuteNonQuery();
command.Dispose();
connection.Close();
MessageBox.Show("workd ! ");

Comentarii

  • adăugați câteva cuvinte pentru a explica de ce aceasta este o soluție la întrebare –  > Por RealCheeseLord.