Domanda

È possibile in C # usare un OleDbAdapter e usare il suo metodo Update per un set di dati quando una tabella non ha una chiave primaria e come posso farlo?

È stato utile?

Soluzione

Ecco un esempio in VB, che potrebbe darti un'idea generale.

Altri suggerimenti

Puoi sempre trovare una riga usando myTable.Select (" myColumn Come 'valore univoco' ");

Puoi aggiungere una chiave primaria?

Senza un qualche tipo di ID univoco (che dovrebbe essere il PK), non c'è modo di sapere quale riga aggiornare.

Ho avuto lo stesso problema quando ho usato un database di terze parti. Non hanno chiavi primarie nel loro database, ma hanno una combinazione di campi unici.

Innanzitutto, crea un datatable e riempilo con il risultato della query usando la condizione unica.

DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(sqlstring, ACCESS_dbConnection);
adapter.Fill(dt);

In secondo luogo, sostituire ds con i dati aggiornati per colonna.

foreach (DataColumn col in datarow.Columns)
{
    Debug.WriteLine(col.ColumnName);
    ds.Rows[0][col.ColumnName] = datarow.Rows[0][col.ColumnName];
}

Quindi, puoi aggiornare.

OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);
adapter.UpdateCommand = cb.GetUpdateCommand();
adapter.InsertCommand = cb.GetInsertCommand();
adapter.Update(ds);

Questo funziona per me.

Fallo solo quando sei sicuro che ci siano solo uno con una sola query. In caso contrario, potresti voler aggiungere un po 'di " if " controllo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top