2016-08-25 6 views
0

Я пытаюсь создать и написать по строкам базу данных на основе службы с текстовым полем, без дополнительных столбцов, только для индекса и фразы. Так как новичкам нужна помощь или полезный пример для моего случая, чтобы выяснить, что я делаю неправильно здесь.Запись строки в базу данных на основе службы с текстовым полем

Так что я сделал, моя база данных:

CREATE TABLE [dbo].[User] 
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [Phrase] TEXT NOT NULL 
) 

В столбце Id Свойства спецификации идентичности Я изменил (это тождество) Верно, затем Update dbo.User [Design], а затем обновить к моему SampleDatabase .mdf, затем Показать таблицы данных моя вкладка Пользователь, а затем я добавил новый пункт LINQ к классам SQL к моему проекту как DATACLASS и я добавил в мой каталог Program.cs AppDomain.CurrentDomain.SetData("DataDirectory", System.Environment.CurrentDirectory.Replace("\\bin\\Debug", "")); таким образом:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace XX_7_DATABASE_LOCAL 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      AppDomain.CurrentDomain.SetData("DataDirectory", System.Environment.CurrentDirectory.Replace("\\bin\\Debug", "")); 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 
    } 
} 

И здесь моя Form1:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Data.SqlClient; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace XX_7_DATABASE_LOCAL 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      User newUser = new User(); 
      newUser.Phrase = (textBox1.Text); 

      DataClassDataContext dbCtx = new DataClassDataContext(); 
      dbCtx.Users.InsertOnSubmit(newUser); 

      try 
      { 
       dbCtx.SubmitChanges(); 
       MessageBox.Show("Successful!"); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show("Fail!"); 
      }   
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      DataClassDataContext dbContext = new DataClassDataContext(); 
      var getData = (
       from x in dbContext.Users 
       select x 
       ); 

      dataGridView1.DataSource = getData; 
     } 
    } 
} 

Так я заменил сообщение MessageBox.Show(ex.Message + ":" + ex.StackTrace);, но не уверен, что это значит, и что я должен делать:

enter image description here

если спецификация Идентичность False, то пишет только одну строку в базу данных, но со второй, я получил это сообщение:

enter image description here

+0

Попытка добавления пользователя, оставляя его идентификатор из него. Я имею в виду, если вы установили столбец идентификатора таблицы User в Identity, то ваша база данных должна выполнить задание для вас: оно автоматически увеличит идентификатор ... это причина вашей первой ошибки: когда IDENTITY_INSERT выключен, ваша база данных автоматически обрабатывает его – Forlani

ответ

0

я отправил в качестве комментария, но я думаю, что это на самом деле ответ. Итак, я добавлю еще несколько пояснений:

Если вы явно не указываете базе данных, что вы можете вставить значение в столбец Identity, установив INSERT_IDENTITY в On, база данных будет его владельцем, а не вами. Вы можете либо перестать пытаться вставить идентификатор пользователя, либо позволить базе данных обращаться с ним за вас, либо вы можете установить INSERT_IDENTITY в положение «Вкл» и выполнить задание. Если вы не устанавливаете идентификатор в столбец Identity, убедитесь, что не будет дублированных идентификаторов, иначе он сработает, как описано во второй ошибке.

Я бы выбрал первый вариант и предоставил базу данных для вас.

Кредиты: Problems with IDENTITY_INSERT Set to OFF? :-/

+0

Я новичок в C# и базе данных, как я уже сказал, если Identity Specification True, мой файл пуст, ничего не пишет. Или я тебя не понимаю? –

+0

Он пуст, потому что вы получаете сообщения об ошибках. Как ваш пользовательский класс? Имеет ли он идентификатор? – Forlani

+0

newUser.Id, вероятно, не прав? Попробуйте сначала удалить параметр идентификатора вашего пользовательского класса ... – Forlani

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

  • Нет связанных вопросов^_^