Domanda

Sto cercando di seguire un tutorial online e ho seguito i passaggi esattamente però continuo a ricevere un errore durante il tentativo di scrivere su un database.

Ecco il codice per una forma semplice

@{
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>
.

Ecco l'errore che ottengo in Visual Studio sul tentativo di esecuzione dell'istruzione Inserisci SQL:

"An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll but was not handled in user code"
.

Questo è il testo dell'errore restituito da SQL e visualizzato sulla pagina Web:

"The column cannot contain null values. [ Column name = ID,Table name = ContactLog ]"
.

Ho compilato completamente il modulo

È stato utile?

Soluzione

I tuoi errori nella domanda nonostante, il problema sembra essere quello che hai un tavolo (ContactLog) con una colonna (ID) che ha l'attributo non nullo ad esso collegato.Stai cercando di inserire una riga senza un valore in detta colonna, e questo è causato questo errore.

Per fissare questo inserire un valore nella colonna [ID]] o impostare l'attributo di identità su true invece di false su detta colonna e consentirle di autogenerazione / automazione automatica.

La mia ipotesi è che anche quando hai riparato la sintassi dell'istruzione Inserisci, non è ancora possibile elaborare l'inserimento correttamente.

Altri suggerimenti

Hai cinque colonne, ma solo 3 valori.

La tua dichiarazione è

INSERT INTO ContactLog (Name, Email, Subject, Message, DateSent)
                VALUES (@0, @1, @3)
.

Cosa è successo a @ 2 e @ 4?

Forse hai bisogno

db.Execute("INSERT INTO ContactLog (Name, Email, Subject, Message, DateSent) "+
           "VALUES (@0, @1, @2, @3, @4)",
           name, email, subject, message, DateTime.Now);
.

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