J'ai une application .NET WnDows en C #. C'est une simple application Windows utilisant l'édition de la communauté de la base de données MySQL 5.1. J'ai téléchargé le pilote ODBC MySQL et j'ai créé une DSN à ma base de données sur ma machine locale. Sur ma candidature, je peux effectuer des requêtes de type sans problème sans problèmes, mais lorsque j'exécute une instruction insertion donnée (pas que j'ai essayé de faire d'autres personnes), j'obtiens l'erreur suivante:
{"Error [HY001] [MYSQL] [MYSQL] ] [ODBC 5.1 Driver] [MYSQLD-5.0.27-Community-NT] Erreur d'allocation de mémoire "} p>
Je cours sur une machine Windows XP. Ma machine a 1 Go de mémoire. Quelqu'un a des idées? Voir le code ci-dessous p>
OdbcConnection MyConn = DBConnection.getDBConnection(); int result = -1; try { MyConn.Open(); OdbcCommand myCmd = new OdbcCommand(); myCmd.Connection = MyConn; myCmd.CommandType = CommandType.Text; OdbcParameter userName = new OdbcParameter("@UserName", u.UserName); OdbcParameter password = new OdbcParameter("@Password", u.Password); OdbcParameter firstName = new OdbcParameter("@FirstName", u.FirstName); OdbcParameter LastName = new OdbcParameter("@LastName", u.LastName); OdbcParameter sex = new OdbcParameter("@sex", u.Sex); myCmd.Parameters.Add(userName); myCmd.Parameters.Add(password); myCmd.Parameters.Add(firstName); myCmd.Parameters.Add(LastName); myCmd.Parameters.Add(sex); myCmd.CommandText = mySqlQueries.insertChatUser; result = myCmd.ExecuteNonQuery(); } catch (Exception e) { //{"ERROR [HY001] [MySQL][ODBC 5.1 Driver][mysqld-5.0.27-community-nt]Memory // allocation error"} EXCEPTION ALWAYS THROWN HERE } finally { try { if (MyConn != null) MyConn.Close(); } finally { } }
3 Réponses :
C'est parce que certains champs acceptent NULL, je les avais passé comme null où ils devraient être passés comme dbnull.value. Pour tous les champs qui permettent à NULL devraient être vérifiés pour NULL et, le cas échéant, NULL, DBNULL.Value doit être adopté. p>
Juste pour l'exhaustivité, le relevé SQL de Chinjoo serait probablement quelque chose comme ceci:
// if the value is "null" return DBNull, else just the value OdbcParameter LastName = new OdbcParameter("@LastName", (u.LastName == null) ? System.DBNull.Value : (object)u.LastName);
Cette exception peut également être soulevée si vous essayez d'insérer des caractères non valides dans un champ Varchar. Par exemple, si la chaîne est générée par une machine UNIX et a terminé la fin des caractères de ligne '\ n'. Vous pouvez simplement remplacer ces caractères problématiques au style Windows, ou vicefersa, ou simplement le supprimer si vous ne souhaitez pas stocker la fin des lignes. P>
Vous pouvez vérifier les chaînes et si l'un d'entre eux dispose de caractères de fin de ligne, essayez de répéter l'insert les supprimer. Si cela fonctionne, le problème sont ces caractères. P>