2014-01-09 5 views
0

Я пытаюсь следовать учебному курсу онлайн, и я следил за его действиями, однако я все время получаю сообщение об ошибке при попытке записи в базу данных.Ошибка базы данных ASP.NET

Вот код для простой формы

@{ 
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 вставки заявления:

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

Это текст ошибки с сайта:

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

Я заполнил форму co mpletely

+0

Обратите внимание, что этот вопрос не имеет ничего общего с ASP.NET. –

ответ

1

Ваши ошибки в вопросе несмотря на это, проблема, кажется, что у вас есть таблица (contactLog) с колонки (идентификатор), который имеет атрибут NOT NULL, прикрепленную к Это. Вы пытаетесь вставить строку без значения в указанном столбце, и это вызывает эту ошибку.

Чтобы исправить это, вставьте значение в столбец [ID] или установите атрибут идентификации TRUE вместо FALSE в указанном столбце и разрешите автогенерацию/автоинкремент.

Мое предположение заключается в том, что даже если вы исправили синтаксис инструкции insert, вы все равно не смогли правильно обработать вставку.

+0

Большое спасибо @Dylan B и John Saunders за ваши ответы, которые были именно той проблемой. Я не слишком хорошо знаком с базами данных. Я предполагаю, что атрибут Identity - это нечто вроде автоматического увеличения. – psycho

+0

Да, автоинкремент - это версия доступа одной и той же вещи. Я на самом деле не уверен, что это канонический, но они функционально эквивалентны и (мое предположение) реализованы по-разному. –

1

У вас есть пять столбцов, но всего 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); 
+0

Извинения У меня был подходящий номер, который я редактировал, пытаясь исправить проблему. Я редактировал ошибки в вопросе. – psycho

+0

Как @Dylan: вам нужно, чтобы столбец 'ID' был столбцом IDENTITY' или имел другое значение по умолчанию, поскольку он не может иметь нули. –

Смежные вопросы