Erreur de base de données ASP.NET
-
21-12-2019 - |
Question
J'essaie de suivre un tutoriel en ligne et j'ai suivi les étapes exactement, mais je continue à obtenir une erreur lors de la tentative d'écrire dans une base de données.
Voici le code pour une forme simple
@{
var name = string.Empty;
var email = string.Empty;
var subject = string.Empty;
var message = string.Empty;
if (IsPost){
name = Request["txtName"];
email = Request["txtEmail"];
subject = Request["txtSubject"];
message = Request["txtMessage"];
var db = Database.Open("FormAndDataDB");
db.Execute("INSERT INTO ContactLog (Name, Email, Subject, Message, DateSent) " +
"VALUES (@0, @1, @2, @3, @4)", name, email, subject, message, DateTime.Now);
}
}
<doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="contact.cshtml" method="POST">
<p>
<label for="txtName">Name:</label><br />
<input type="text" name="txtName" id="txtName" value="@name"/>
</p>
<p>
<label for="txtEmail">Email:</label><br />
<input type="text" name="txtEmail" id="txtEmail" value="@email" />
</p>
<p>
<label for="txtSubject">Subject:</label><br />
<input type="text" name="txtSubject" id="txtSubject" value="@subject" />
</p>
<p>
<label for="txtMessage">Message:</label><br />
<textarea name="txtMessage" id="txtMessage" cols="40" rows="10" >@message</textarea>
</p>
<p>
<input type="submit" value="send" />
</p>
</form>
</body>
</html>
Voici l'erreur que je reçois dans Visual Studio sur tentative d'exécution de l'instruction d'insertion SQL:
"An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll but was not handled in user code"
Ceci est le texte d'erreur renvoyé de SQL et affiché sur la page Web:
"The column cannot contain null values. [ Column name = ID,Table name = ContactLog ]"
J'ai rempli complètement le formulaire
La solution
Vos erreurs dans la question nonobstant, le problème semble être que vous avez une table (contact) avec une colonne (ID) qui a l'attribut NON NULL attaché à celui-ci.Vous essayez d'insérer une ligne sans valeur dans ladite colonne et qui provoque cette erreur.
Pour résoudre ce problème, insérez une valeur dans la colonne [ID] ou définissez l'attribut d'identité sur TRUE au lieu de FALSE sur ladite colonne et laissez-la d'autogénérer / automatique.
Mon hypothèse est que même lorsque vous avez fixé la syntaxe de l'instruction insertion, vous ne pouviez toujours pas traiter l'insertion correctement.
Autres conseils
Vous avez cinq colonnes, mais seulement 3 valeurs.
Votre déclaration est
INSERT INTO ContactLog (Name, Email, Subject, Message, DateSent)
VALUES (@0, @1, @3)
Qu'est-il arrivé à @ 2 et à @ 4?
Peut-être que vous avez besoin
db.Execute("INSERT INTO ContactLog (Name, Email, Subject, Message, DateSent) "+
"VALUES (@0, @1, @2, @3, @4)",
name, email, subject, message, DateTime.Now);