2010-04-26 3 views
3

У меня есть запрос linq для вставки данных в таблицу. но он не работает. Я видел, что пример в Интернете пытался сделать так, но, похоже, не работает.Вставка данных с использованием Linq

Имя вкладки: логин имеет 3 столбца пользователя, имя пользователя и пароль. Я установил userid как автоинкремент в базе данных. Поэтому я должен каждый раз вносить только имя пользователя и пароль. Вот мой код.

linq_testDataContext db = new linq_testDataContext(); 
login insert = new login(); 
      insert.username = userNameString; 
      insert.Password = pwdString; 
      db.logins.Attach(insert);// tried to use Add but my intellisence is not showing me Add.I saw attach but dosent seems to work. 
      db.SubmitChanges(); 
+0

Как это не работает? – SLaks

+0

говорит, что «первичный ключ не найден», но я указал первичный ключ в моей базе данных, т.е. userid, который автоматически увеличивается. – Ani

+0

. Вам также необходимо установить это поле первичного ключа на вашем DBML. – Nate

ответ

3

Attach() неправильный метод, вам нужно вызвать InsertOnSubmit(), чтобы позволить Linq-To-Sql генерировать оператор вставки для вас. Attach() предназначен для распределенных сценариев, где ваш объект не был извлечен через тот же контекст данных, который используется для отправки изменений.

linq_testDataContext db = new linq_testDataContext(); 
login insert = new login(); 
      insert.username = userNameString; 
      insert.Password = pwdString; 
      db.logins.InsertOnSubmit(insert);// tried to use Add but my intellisence is not showing me Add.I saw attach but dosent seems to work. 
      db.SubmitChanges(); 
+0

@Johannes Спасибо, что помогли, но я попытался сделать это, вызывая исключение, говорящее «нет первичного ключа найдено», но у меня есть userid (автоинкремент) в качестве первичного ключа в моей базе данных. – Ani

+0

Правильно ли это установлено в вашем dblm-сопоставлении? –

+0

Я воссоздал dbml, теперь он не бросает никаких ошибок, но данные также не вставляются в таблицу. – Ani

4

взглянуть на http://www.codeproject.com/KB/linq/LINQToSQLBaseCRUDClass.aspx

linq_testDataContext db = new linq_testDataContext(); 
login insert = new login(); 
      insert.username = userNameString; 
      insert.Password = pwdString; 
      db.logins. InsertOnSubmit(insert); 
      db.SubmitChanges(); 

Если вы Attach - Он должен приложить к конкретному объекту контекста .Но оно не отражает в базе данных Если вы хотите вставить любые значения попробовать с InsertOnSubmit (объект) и сделать SubmitChanges(), чтобы сохранить его в базе данных

+0

@anish Thanx, это бросает еще одно исключение, которое идет на linq_test.designer.cs, говоря «Неверная спецификация AutoSync для члена userid», перед этим я меняю свой dbml, чтобы установить идентификатор пользователя в качестве первичного ключа. Спасибо – Ani

+0

попытайтесь построить dbml и попробуйте .. Если вы создадите только dbml, то он создаст класс. В противном случае он будет вызывать ошибку ... – anishMarokey

+0

@ Аниш Да, я просто попробовал восстановить dbml. и теперь он не вызывает никаких исключений или ошибок, но данные также не вставляются в tabel. Спасибо Aniruddh – Ani

2

Способ сохранения данных о сотрудниках в базу данных.

Insert, Update & Delete in LINQ C#

 Employee objEmp = new Employee(); 
     // fields to be insert 
     objEmp.EmployeeName = "John"; 
     objEmp.EmployeeAge = 21; 
     objEmp.EmployeeDesc = "Designer"; 
     objEmp.EmployeeAddress = "Northampton";     
     objDataContext.Employees.InsertOnSubmit(objEmp); 
     // executes the commands to implement the changes to the database 
     objDataContext.SubmitChanges(); 
Смежные вопросы