Modifica dei dati in un database

Le istruzioni SQL che modificano i dati, ad esempio INSERT, UPDATE o DELETE, non restituiscono righe. In modo analogo, molte stored procedure eseguono un'operazione ma non restituiscono righe. Per eseguire comandi che non restituiscono righe, creare un oggetto Command con il comando SQL appropriato, un oggetto Connection con tutti i Parameters necessari e utilizzare il metodo ExecuteNonQuery dell'oggetto Command.

Il metodo ExecuteNonQuery restituisce un intero che rappresenta il numero di righe interessate dall'istruzione o dalla stored procedure eseguita. Se si eseguono più istruzioni, il valore restituito sarà la somma dei record interessati da ognuna delle istruzioni eseguite.

Nell'esempio di codice seguente viene eseguita un'istruzione INSERT per inserire un record in un database utilizzando ExecuteNonQuery.

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
                                                   "Initial Catalog=northwind")
nwindConn.Open()

Dim insertStr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"

Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
Dim recordsAffected As Int32 = insertCMD.ExecuteNonQuery()
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;" +
                                            "Initial Catalog=northwind");
nwindConn.Open();

string insertStr = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')";

SqlCommand insertCMD = new SqlCommand(insertStr, nwindConn);
Int32 recordsAffected = insertCMD.ExecuteNonQuery();

Nell'esempio di codice seguente viene eseguita la stored procedure creata dal codice di esempio in Esecuzione di operazioni nel catalogo. La stored procedure non restituisce righe, quindi viene utilizzato il metodo ExecuteNonQuery, ma riceve un parametro di input e restituisce un parametro di output e un valore restituito.

Per l'oggetto OleDbCommand, il parametro ReturnValue deve essere aggiunto prima all'insieme Parameters.

Dim insertCatCMD As SqlCommand = New SqlCommand("InsertCategory" , nwindConn)
insertCatCMD.CommandType = CommandType.StoredProcedure

Dim workParm As SqlParameter

workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int)
workParm.Direction = ParameterDirection.ReturnValue

workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15)

workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int)
workParm.Direction = ParameterDirection.Output

insertCatCMD.Parameters("@CategoryName").Value = "New Category"
insertCatCMD.ExecuteNonQuery()

Dim catID As Int32 = CInt(insertCatCMD.Parameters("@Identity").Value)
Dim rowCount As Int32 = CInt(insertCatCMD.Parameters("@RowCount").Value) 
[C#]
SqlCommand insertCatCMD = new SqlCommand("InsertCategory" , nwindConn);
insertCatCMD.CommandType = CommandType.StoredProcedure;

SqlParameter workParm;

workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int);
workParm.Direction = ParameterDirection.ReturnValue;

workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15);

workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int);
workParm.Direction = ParameterDirection.Output;

insertCatCMD.Parameters["@CategoryName"].Value = "New Category";
insertCatCMD.ExecuteNonQuery();

Int32 catID = (Int32)insertCatCMD.Parameters["@Identity"].Value;
Int32 rowCount = (Int32)insertCatCMD.Parameters["@RowCount"].Value;

Vedere anche

Utilizzo di provider di dati .NET Framework per accedere ai dati | Esecuzione di operazioni nel database e modifica di dati | Classe OleDbCommand | Classe OleDbConnection | Classe OdbcCommand | Classe OdbcConnection | Classe SqlCommand | Classe SqlConnection