2017-06-24 5 views
-1

Ich bin neu bei StackOverflow und es tut mir leid, wenn ich die Dinge nicht richtig erkläre. Ich möchte Zeile aus DoctorTbl löschen, aber ich bekomme diese Nachricht:System.Data.SqlClient.SqlException: 'Falsche Syntax in der Nähe', '.' C#

'Falsche Syntax in der Nähe', '.'

kann mir bitte jemand helfen ??


SqlDataAdapter DoctorAdapter; 
    DataTable Doctordt; 

    public DalDoctor() 
    { 
     DoctorAdapter = new SqlDataAdapter(); 
     PreperCommands(); 
    } 
    public DalDoctor(string conn) : base(conn) 
    { 
     DoctorAdapter = new SqlDataAdapter(); 
     PreperCommands(); 
    } 
    private void PreperCommands() 
    { //select command 
     DoctorAdapter.SelectCommand = Conn.CreateCommand(); 
     DoctorAdapter.SelectCommand.CommandText = "SELECT * FROM DoctorTbl"; 
     //delete command 
     DoctorAdapter.DeleteCommand = Conn.CreateCommand(); 
     DoctorAdapter.DeleteCommand.CommandText = "DELETE FROM DoctorTbl WHERE [email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"; 
     DoctorAdapter.DeleteCommand.Parameters.Add("@DocFirstName", SqlDbType.NChar, 10, "DocFirstName"); 
     DoctorAdapter.DeleteCommand.Parameters.Add("@DocLastName", SqlDbType.NChar, 10, "DocLastName"); 
     DoctorAdapter.DeleteCommand.Parameters.Add("@ExpertiseId", SqlDbType.Int, 10, "ExpertiseId"); 
     DoctorAdapter.DeleteCommand.Parameters.Add("@License", SqlDbType.Int, 10, "License"); 
     DoctorAdapter.DeleteCommand.Parameters.Add("@DocTelephone", SqlDbType.Int, 10, "DocTelephone"); 
     DoctorAdapter.DeleteCommand.Parameters.Add("@DoctorId", SqlDbType.Int, 10, "DoctorId"); 
    } 
    public bool SaveToDB(DataTable dt) 
    { 
     //try 
     //{ 
      DoctorAdapter.Update(dt); 
      return true; 
     //} 
     //catch (SqlException ex) 
     //{ 
     // return false; 
     //} 

    } 

    public DataTable FillTable() 
    { 
     DataTable dt = new DataTable(); 
     DoctorAdapter.Fill(dt); 
     dt.TableName = "DoctorTbl"; 
     return dt; 
    } 
    public bool delete(DataRow rowdelete) 
    {  

     Doctordt = FillTable(); 
     foreach (DataRow dr in Doctordt.Rows) 
     { 
      if (Convert.ToInt32(dr["DoctorId"]) == Convert.ToInt32(rowdelete["DoctorId"])) 
      { 
       dr.Delete(); 
      } 
     } 
     return SaveToDB(Doctordt); 

    } 

hier bekomme ich die eror: (in dieser Reihenfolge: DoctorAdapter.Update (dt);)


public bool SaveToDB(DataTable dt) 
    { 
     try 
     { 
      DoctorAdapter.Update(dt); 
      return true; 
     } 
     catch (SqlException ex) 
     { 
      return false; 

     } 

    } 
+0

einen Datensatz löschen ist genug, um den Primärschlüssel dieser Tabelle zu kennen. Ist DoctorID der Primärschlüssel? – Steve

Antwort

1

Ihre Fehler durch eine falsche Syntax in der WHERE-Klausel verursacht sein. Hier sollte jede Bedingung mit einer AND- oder OR-Anweisung mit der nächsten verknüpft werden.

Um einen Datensatz aus einer Tabelle zu löschen, müssen Sie jedoch nur den Primärschlüssel dieser Tabelle kennen und einen Wert aus Ihren Daten verwenden, um diesen einzelnen Datensatz in der Datenbank zu suchen. Auch gibt es keine Notwendigkeit, einen SqlDataAdapter in Ihrem Szenario zu verwenden, um eine Reihe

So löscht davon aus, dass DoctorID der Primärschlüssel ist, könnten Sie den Datenbankeintrag mit löschen ....

public bool delete(DataRow rowdelete) 
{  
    using(SqlCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "DELETE FROM DoctorTbl WHERE DoctorID = @doctorid"; 
     cmd.Parameters.Add("@doctorid", SqlDbType.Int).Value = Convert.ToInt32(rowdelete["DoctorId"]); 
     cmd.ExecuteNonQuery(); 

     // Now fix the in memory table to remove the deleted row 
     DataTable dt = rowDelete.Table; 
     rowDelete.Delete(); 
     table.AcceptChanges(); 
    } 
} 
Verwandte Themen