我正在尝试在线遵循教程,我已经完全遵循了步骤,但是在尝试写入数据库时,我一直在收到错误。

这是一个简单形式的代码

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

以下是在执行SQL INSERT语句的尝试时获得Visual Studio的错误:

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

这是从SQL返回的错误文本,并在网页上显示:

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

我完全填写了表格

有帮助吗?

解决方案

尽管存在问题的错误,但问题似乎是您有一个表(ContactLog),列(ID)包含没有null属性的列。您正在尝试在没有所述列中的值的情况下插入一行,并且导致此错误。

要将其固定到[id]列中,或将标识属性设置为true,而不是在所述列上的false,并允许它自动/自动增量。

我的假设是即使您修复了插入语句的语法,您仍无法正常处理插入。

其他提示

你有五列,但只有3个值。

您的陈述是

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

发生在@ 2和@ 4?

也许你需要

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top