Erreur lors de l’exécution d’une OleDbCommand .. “Doit déclarer la variable scalaire” @MaxID “.”

private void AddValue(ssortingng strValue) { //get the maximum id for Lists first int MaxID = DataOperations.ReturnMaxIDInATable("Lists", connSsortingng); int iSqlStatus = 0; ssortingng query = "INSERT INTO Lists(ID, ListName, ListValue) VALUES(@MaxID, @ListName, @ListValue)"; MaxID++; OleDbConnection dbConn = new OleDbConnection(connSsortingng); OleDbCommand dbComm = new OleDbCommand(); dbComm.Parameters.Clear(); try { dbComm.CommandText = query; dbComm.CommandType = CommandType.Text; OleDbParameter IDParam = new OleDbParameter(); IDParam.ParameterName = "@MaxID"; IDParam.OleDbType = OleDbType.BigInt; IDParam.Value = MaxID; dbComm.Parameters.Add(IDParam); dbComm.Parameters.AddWithValue("@ListName", ListName); dbComm.Parameters.AddWithValue("@ListValue", strValue); dbComm.Connection = dbConn; DataAccess.HandleConnection(dbConn); iSqlStatus = Convert.ToInt16(dbComm.ExecuteNonQuery()); //Now check the status if (iSqlStatus != 0) { //DO your failed messaging here //return false; } else { //Do your success work here //dbComm. //return true; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error inserting value in " + ListName + "," + strValue); //return false; } finally { DataAccess.HandleConnection(dbConn); } } 

Je crois que vous devez utiliser des points d’interrogation pour les parameters lors de l’exécution de SQL via OleDbCommand (alors que SqlCommand utilise @). Exemple:

 INSERT INTO Lists (ID, ListName, ListValue) VALUES (?, ?, ?) 

Vous devez uniquement append les parameters dans l’ordre dans lequel ils apparaissent dans le code SQL.

Si vous incluez la clause “DECLARE” au début de la requête, cela fonctionnera:

 ssortingng query = "DECLARE @MaxID as bigint, "+ " @ListName as Varchar(100), "+ " @ListValue As Varchar(100) " + " INSERT INTO Lists(ID, ListName, ListValue) " + " VALUES(@MaxID, @ListName, @ListValue)" 

De plus, la bonne solution consiste à changer votre pilote en SQLClient et OracleClient. OleDb n’est pas recommandé pour être utilisé avec SQL 2005 et supérieur.

Le fragment suivant devrait se lire:

 IDParam.ParameterName = "MaxID"; IDParam.OleDbType = OleDbType.BigInt; IDParam.Value = MaxID; dbComm.Parameters.Add(IDParam); dbComm.Parameters.AddWithValue("ListName", ListName); dbComm.Parameters.AddWithValue("ListValue", strValue); 

Cela semblait faire l’affaire.

 ssortingng query = ssortingng.Format("INSERT INTO Lists(ID, ListName, ListValue) VALUES({0}, '{1}', '{2}')", MaxID, ListName, strValue); 

Bien que j’ai des réserves à ce sujet, comme si je devais append une valeur de date?