Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 15.11.2010, 16:05   #1
hk47
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 23
Репутация: 10
По умолчанию Добавление данных в базу через LINQ to SQL

Всем привет.
Я пишу приложение на C#, в котором для операций с базой данных использую технологию LINQ to SQL (в качестве СУБД использую MS SQL Server Compact Edition которая встроена в Visual Studio 2008). С запросами я разобрался все работает превосходно. Однако при добавлении данных в базу возникает проблема. Консолька отражает что строка добавлена, но в самой базе новая строка не появляется.
Приведу код, которым я оперирую в попытке разобраться.
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //создаем экземпляр DataContext оперируемой базы данных
            DataClasses1DataContext db = new DataClasses1DataContext();
            t newrec = new t//создание новой записи
            {
                    name ="name_Inserted"
            };
            db.ts.InsertOnSubmit(newrec);//вставляем данные в таблицу ts
            db.SubmitChanges();//фиксируем изменения в базе
            //пишем текст запроса на выборку всех данных из таблицы 
            var queryAfterInserting = from table in db.ts
                     select table;
            //выводим на экран
            foreach (var table_t in queryAfterInserting)
            {
                Console.WriteLine("{0} -- {1}", table_t.ID, table_t.name);
            }
        }
    }
}

В чем может быть проблема?
hk47 вне форума   Ответить с цитированием
Старый 15.11.2010, 16:39   #2
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

http://msdn.microsoft.com/en-us/library/bb763516.aspx читаем очень внимательно, если лень, то именно вот это
Цитата:
The added entity will not appear in query results from this table until after SubmitChanges has been called.
UPD:
Прошу прощения, мой фейл, не заметил.

UPD:
Вы не переопределяли SubmitChanges? Это весь код что у вас есть?

Я вот не уверен, DataClasses1DataContext с чем связан то? Ну с самой базой хоть связан? Я просто не вижу конструктора без параметров здесь http://msdn.microsoft.com/en-us/libr...tacontext.aspx
__________________
Home | Android for food | XWindows Dock | github

Последний раз редактировалось BOBAH13; 15.11.2010 в 16:45.
BOBAH13 вне форума   Ответить с цитированием
Старый 15.11.2010, 16:43   #3
hk47
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 23
Репутация: 10
По умолчанию

BOBAH13
У меня эта строчка есть.
Код:

db.SubmitChanges();//фиксируем изменения в базе

В том то и дело, что эта строчка есть, и изменения отображаются только на момент вывода на экран. Складывается такое впечатление что изменения происходят только в экземляре БД, а не в самой БД.

могу привести код где формируются сущностные классы

Код:

#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3053
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace ConsoleApplication1
{
	using System.Data.Linq;
	using System.Data.Linq.Mapping;
	using System.Data;
	using System.Collections.Generic;
	using System.Reflection;
	using System.Linq;
	using System.Linq.Expressions;
	using System.ComponentModel;
	using System;
	
	
	[System.Data.Linq.Mapping.DatabaseAttribute(Name="ddb")]
	public partial class DataClasses1DataContext : System.Data.Linq.DataContext
	{
		
		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
		
    #region Extensibility Method Definitions
    partial void OnCreated();
    partial void Insertt(t instance);
    partial void Updatet(t instance);
    partial void Deletet(t instance);
    #endregion
		
		public DataClasses1DataContext() : 
				base(global::ConsoleApplication1.Properties.Settings.Default.ddbConnectionString, mappingSource)
		{
			OnCreated();
		}
		
		public DataClasses1DataContext(string connection) : 
				base(connection, mappingSource)
		{
			OnCreated();
		}
		
		public DataClasses1DataContext(System.Data.IDbConnection connection) : 
				base(connection, mappingSource)
		{
			OnCreated();
		}
		
		public DataClasses1DataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
				base(connection, mappingSource)
		{
			OnCreated();
		}
		
		public DataClasses1DataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
				base(connection, mappingSource)
		{
			OnCreated();
		}
		
		public System.Data.Linq.Table<t> ts
		{
			get
			{
				return this.GetTable<t>();
			}
		}
	}
	
	[Table(Name="dbo.t")]
	public partial class t : INotifyPropertyChanging, INotifyPropertyChanged
	{
		
		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
		
		private int _ID;
		
		private string _name;
		
    #region Extensibility Method Definitions
    partial void OnLoaded();
    partial void OnValidate(System.Data.Linq.ChangeAction action);
    partial void OnCreated();
    partial void OnIDChanging(int value);
    partial void OnIDChanged();
    partial void OnnameChanging(string value);
    partial void OnnameChanged();
    #endregion
		
		public t()
		{
			OnCreated();
		}
		
		[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
		public int ID
		{
			get
			{
				return this._ID;
			}
			set
			{
				if ((this._ID != value))
				{
					this.OnIDChanging(value);
					this.SendPropertyChanging();
					this._ID = value;
					this.SendPropertyChanged("ID");
					this.OnIDChanged();
				}
			}
		}
		
		[Column(Storage="_name", DbType="VarChar(50)")]
		public string name
		{
			get
			{
				return this._name;
			}
			set
			{
				if ((this._name != value))
				{
					this.OnnameChanging(value);
					this.SendPropertyChanging();
					this._name = value;
					this.SendPropertyChanged("name");
					this.OnnameChanged();
				}
			}
		}
		
		public event PropertyChangingEventHandler PropertyChanging;
		
		public event PropertyChangedEventHandler PropertyChanged;
		
		protected virtual void SendPropertyChanging()
		{
			if ((this.PropertyChanging != null))
			{
				this.PropertyChanging(this, emptyChangingEventArgs);
			}
		}
		
		protected virtual void SendPropertyChanged(String propertyName)
		{
			if ((this.PropertyChanged != null))
			{
				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
			}
		}
	}
}
#pragma warning restore 1591


Последний раз редактировалось Stilet; 15.11.2010 в 18:08.
hk47 вне форума   Ответить с цитированием
Старый 15.11.2010, 17:05   #4
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Зачем все то, бог ты мой... А это покажите? global::ConsoleApplication1.Propert ies.Settings.Default.ddbConnectionS tring, ведь именно с помощью этой строки LINQ коннектится к базе, к файлу.
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 15.11.2010, 17:27   #5
hk47
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 23
Репутация: 10
По умолчанию

BOBAH13
Вы спрашивали про код, который у меня есть. Я вам привел этот код. Вы видите там всевозможные перегруженные методы DataClasses1DataContext включая метод без параметров, который я и использую.
что касается ConnectionString то она выглядит так:

Код:

Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\ddb.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True

hk47 вне форума   Ответить с цитированием
Старый 15.11.2010, 18:44   #6
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Цитата:
Вы видите там всевозможные перегруженные методы DataClasses1DataContext включая...
"Спасибо" за разъяснение. Ну вот и вопрос, вы с этой самой базой (указанный файл "C:\Documents and Settings\User\Мои док...ddb.mdf" работаете, т.е. смотрите в ХХХ приложении на присутствие нужной записи? Т.к. по коду все верно, и тут явно человеческий фактор присутствует. Еще интересует вопрос по ID для новой записи, в вашей таблицы установлено автоматическое инкрементирование для primary key (id) ? Возможно из-за этой проблемы база игнорирует ваш запрос.
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записей через SQL: не добавляются числовые поля NikkMih БД в Delphi 4 01.06.2010 18:28
Добавление строки в базу данных из visual studio Жендопыр Помощь студентам 0 24.07.2009 02:32
Передача данных в SQL базу. Ag3r0n Помощь студентам 2 08.03.2009 20:18
базу аксесс пропустить через SQL Ane4ka Microsoft Office Access 5 27.05.2008 10:38
Добавление Удаление Редактирование через SQL beginner БД в Delphi 4 29.05.2007 17:52


15:55.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru