2016-04-27 16 views
-1

Ich benutze diesen Code, um etwas in die Kundentabelle einzufügen, aber es funktioniert nicht? meine Datenbank nicht aktualisiert und der Wert von r immer 0.`Adapter.Update() funktioniert nicht?

using (SqlConnection cn = new SqlConnection(con)) 
     { 
      cn.Open(); 
      string query = string.Format("Select * From Customers"); 
      SqlDataAdapter adapter = new SqlDataAdapter(); 
      SqlCommandBuilder cb = new SqlCommandBuilder(adapter); 


      adapter.SelectCommand = new SqlCommand(query, cn); 
      DataSet db = new DataSet(); 
      adapter.Fill(db,"Customers"); 

      string m = "Bon app'" ,city="london"; 
      query = string.Format("Insert Into Customers (CompanyName , City) Values ('{0}','{1}')",m,city); 
      adapter.InsertCommand =new SqlCommand(query, cn); 

      int r= adapter.Update(db,"Customers"); 

     Console.WriteLine(r); 

`

+0

Ich denke, du mehr über ado.net lesen sollte. Oder Sie führen die Abfrage aus, um die Einfügung auszuführen, oder wenn Sie einen Datenadapter verwenden, müssen Sie die Zeilen zur Datenmenge hinzufügen – Pikoh

Antwort

1

Sie fügen keine Zeilen zu Ihrem DataSet/Datatable, so gibt es DataAdapter hat nichts einzufügen.

db.Tables[0].Rows.Add(m, city); 
int r = adapter.Update(db,"Customers"); 

Abgesehen davon verketten Sie Zeichenfolgen nicht, um Ihre SQL-Abfrage zu erstellen. Verwenden Sie parametrisierte Abfragen.

Also hier ist eine modifizierte Version, die SQL-Parameter verwendet:

using (SqlConnection cn = new SqlConnection(con)) 
{ 
    cn.Open(); 
    string selectQuery = "Select * From Customers"; 
    string insertQuery = "Insert Into Customers (CompanyName , City) Values (@CompanyName, @City)"; 
    SqlDataAdapter adapter = new SqlDataAdapter(); 
    adapter.SelectCommand = new SqlCommand(selectQuery, cn); 
    adapter.InsertCommand = new SqlCommand(insertQuery, cn); 
    DataSet db = new DataSet(); 
    adapter.Fill(db, "Customers"); 

    var icp = adapter.InsertCommand.Parameters; 
    icp.Add("@CompanyName", SqlDbType.NVarChar, 150, "CompanyName"); // optional, restrict length according to database max-length 
    icp.Add("@City", SqlDbType.NVarChar, 100, "City"); 

    DataRow newRow = db.Tables["Customers"].Rows.Add(); 
    newRow.SetField("CompanyName", "Bon app"); 
    newRow.SetField("City", "london"); 
    int r = adapter.Update(db, "Customers"); 
}