Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
1

linq to sql - Ошибка при вставке

05.04.2011, 12:26. Просмотров 2036. Ответов 12
Метки нет (Все метки)

есть метод для вставки:
Код
public void InsertCart(Cart cart) 
{ 
  Table<Cart> newCart = this.GetTable<Cart>(); 
  newCart.InsertOnSubmit(cart); 
  this.SubmitChanges(); 
}
при вызове:
Код
protected void Button1_Click(object sender, EventArgs e) 
{ 
  Cart cart = new Cart(); 
  cart.TypeCart = TextBox1.Text;         
  bc.InsertCart(cart); 
  TextBox1.Text = ""; 
  BindData(); 
}
наблюдется ошибка:
The operation cannot be performed during a call to SubmitChanges
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2011, 12:26
Ответы с готовыми решениями:

DateTimePicker1 при вставке в Sql запрос выходит ошибка
при выборе даты (в основном) выходит ошибка. Видимо ошибка с форматом даты, но не пойму где. ...

Ошибка при вставке значения
Всем привет! При каждой попытке выполнить код происходить необр. исключение на строке...

Ошибка при вставке данных в Access
Имеется база данных на Access. В нескольких таблицах имеется столбец Year. Для работы с базой...

Странное поведение при сохранении через LINQ в MS SQL Server
Добрый день! Есть код: using System; using System.Collections.Generic; using System.Linq; using...

Ошибка приведения типов при Linq запросе
Привет всем) располагаю БД, беру данные из поля таблицы типа float, соответственно студия...

12
Johnny_D
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
05.04.2011, 12:34 2
s7u, а что вообще хочется сделать?
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
05.04.2011, 12:37  [ТС] 3
надо написать слой доступа к данным

Добавлено через 2 минуты
вообщем не могу дигнастировать ошибку
0
Johnny_D
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
05.04.2011, 12:47 4
s7u, ну во первых используя Linq To Sql необходимо сначала объявить DataContext.
C#
1
2
3
4
using(dc = new DataContext())
{
 var cart dc.Cart.Where(x => x.Id == 3).FirstOrDefault();
}
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
05.04.2011, 13:07  [ТС] 5
Johnny_D, он был объявлен (переменная bc)

Добавлено через 3 минуты
если сделать так:

Код
public void InsertCart(ref Cart cart) 
{ 
  Table<Cart> newCart = this.GetTable<Cart>(); 
  newCart.InsertOnSubmit(cart); 
  this.SubmitChanges(); 
}
Код
protected void Button1_Click(object sender, EventArgs e) 
{ 
  Cart cart = new Cart(); 
  cart.TypeCart = TextBox1.Text;         
  bc.InsertCart(ref cart); 
  TextBox1.Text = ""; 
  BindData(); 
}
то работает. прокомментируйте пожалуйста.

Добавлено через 13 минут
класс UnitOfWork:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
   public class UnitOfWork : IDisposable
    {
       private readonly BiblioDataContext dbase;
       public BiblioDataContext datacontext
       {
           get
           {
               return dbase;
           }
       }
 
       private bool _disposed;
 
       public UnitOfWork()
       {
           dbase = new BiblioDataContext();
       }
 
       public void Commit()
       {
           dbase.SubmitChanges();
       }
 
       public void Dispose()
       {
           Dispose(true);
           GC.SuppressFinalize(this);
       }
       private void Dispose(bool disposing)
       {
           if (!this._disposed)
           {
               if (disposing)
               {
                   dbase.Dispose();
               }
               _disposed = true;    
           }
       }
    }
класс PublishingService:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 public class PublishingService : IPublishingService
    {
      private readonly BiblioDataContext dbase = new BiblioDataContext();
 
       public PublishingService(BiblioDataContext dbase)
       {
           if (dbase == null)
               throw new ArgumentNullException("dbase");
           this.dbase = dbase;
       }
 
       public void Create(string NameOfPublishing)
       {
           if (String.IsNullOrEmpty(NameOfPublishing))
               throw new ArgumentNullException("NameOfPublishing");
 
           Publishing publishing = new Publishing()
           {
               //Id_publ = 45,
               Name_publ = NameOfPublishing
           };
 
           dbase.Publishings.InsertOnSubmit(publishing);
           //dbase.SubmitChanges();
       }
 
      public void Delete(Publishing publishing)
       {
           if (publishing == null)
               throw new ArgumentNullException("publishing");
           dbase.Publishings.DeleteOnSubmit(publishing);
       }
 
      public void Update(Publishing publishing, string NameOfPublishing)
       {
           if (publishing == null)
               throw new ArgumentNullException("publishing");
           if (String.IsNullOrEmpty(NameOfPublishing))
               throw new ArgumentNullException("NameOfPublishing");
           
           publishing.Name_publ = NameOfPublishing;
       }
    }
вызов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 protected void Button1_Click(object sender, EventArgs e)
    {
       
        using (UnitOfWork unitofwork = new UnitOfWork())
        {
            PublishingService publishingService = new PublishingService(unitofwork.datacontext);
            publishingService.Create(TextBox1.Text);
            unitofwork.Commit();
        }
        TextBox1.Text = "";
        BindData();       
    }
таже самая ошибка
0
martb1n
55 / 55 / 11
Регистрация: 13.04.2009
Сообщений: 169
05.04.2011, 21:23 6
а что у тебя за таблицы в бд: какие там связи и поля?
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 11:16  [ТС] 7
кто нибудь сталкивался с ошибкой при обновлении записи? :

Cannot add an entity with a key that is already in use

код: вверху
0
martb1n
55 / 55 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 11:46 8
Ты пытаешься вставить данные с ключом, который уже есть в базе.
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 11:51  [ТС] 9
нет, я не вставляю а обновляю

Добавлено через 4 минуты
вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public void Update(int ID, string Status, string State)
       {
           Item upd = new Item();
           var item = (from nameq in dbase.Items
                      where nameq.Item_Id == ID
                      select nameq).SingleOrDefault();
 
           if (String.IsNullOrEmpty(Status))
               throw new ArgumentNullException("Status");
           if (String.IsNullOrEmpty(State))
               throw new ArgumentNullException("State");
 
           upd.Item_Id = ID;
           upd.ISBN = item.ISBN.ToString();
           upd.State = item.State.ToString();
           upd.Status = item.Status.ToString();
           dbase.Items.Attach(upd);
           upd.State = State;
           upd.Status = Status;
           
       }
0
martb1n
55 / 55 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 12:03 10
попробуй upd.Item_Id = ID; вот это закоменьть. и вообще attach не так используется
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 12:12  [ТС] 11
я Attach и использую

Добавлено через 3 минуты
не, не катит. как он тогда строку найдет которую редактировать надо, вообщем: Row not found or changed

Добавлено через 3 минуты
странно что в других классах втавка, удаление и обновление работает нормально

вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public void Update(int ID, string NameOfCategory)
       {
           Category upd = new Category();
           string name = (from nameq in dbase.GetTable<Category>()
                          where nameq.Id_Cat == ID
                          select new { Name_Cat = nameq.Name_Cat }).SingleOrDefault().Name_Cat.ToString();
 
           if (String.IsNullOrEmpty(NameOfCategory))
               throw new ArgumentNullException("NameOfPublishing");
           upd.Id_Cat = ID;
           upd.Name_Cat = name;
           dbase.Categories.Attach(upd);
           upd.Name_Cat = NameOfCategory;
       }
0
martb1n
55 / 55 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 15:10 12
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void Update(int ID, string Status, string State)
       {
           Item upd = new Item();
           var item = (from nameq in dbase.Items
                      where nameq.Item_Id == ID
                      select nameq).SingleOrDefault();
 
           if (String.IsNullOrEmpty(Status))
               throw new ArgumentNullException("Status");
           if (String.IsNullOrEmpty(State))
               throw new ArgumentNullException("State");
           if (item != null)
           {
               dbase.Items.Attach(item);
               item.State = State;
               item.Status = Status;
           }
попробуй так
ну и Submit... еще надо
0
s7u
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 15:47  [ТС] 13
бесполезно.

Cannot attach an entity that already exists.
0
06.04.2011, 15:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2011, 15:47

C#, SQL Server 2005, Linq to Sql.. БД)
Кто-нибудь..!! Помоги, пожалуйста доработать курсовой проект,или под скажите с чего начать, как до...

Ошибка при вставке даты
когда убираю Date и @Date и строку d.InsertParameters.Add(&quot;Date&quot;, DateTime.Now.ToString()); то...

Литература по EntityFramework, WCF, Linq to Objects, и Linq to SQL
Посоветуйте пожалуйста книги или статьи для освоения следующих вещей: EntityFramework, WCF, Linq to...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru