Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вопросы по подключению БД / 10 сообщений из 10, страница 1 из 1
12.02.2013, 21:05
    #38148542
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Здравствуйте. У меня несколько вопросов)
1. Создал большую БД в MSSQL Server 2012. Сделал одно тестовое представление... Добавляю в VS2012 БД через Entity Data Model. А у меня вот такая ошибка вылезает после добавления:

Error 6002: В таблице или представлении "C:\USERS\ALEXANDER\DESKTOP\STROYMAG\STROYMAG.MDF.dbo.Вот" не определен первичный ключ. Ключ был выведен, а определение таблицы или представления было создано в режиме только для чтения. C:\Users\Alexander\Desktop\StroyMag\StroyMag\StroyMag\Model1.edmx

Что это такое?

2. Потом пытался подключиться к БД так:
Код: 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.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string CommandText = "SELECT Класс FROM Ламинат";
            string ConnectionString = @"Data Source=.\SQLEXPRESS,AttachDbFilename=" + @"D:\ПО\StroyMag.mdf" + "Integrated Security=True;Connect Timeout=30;User Instance=True";
 
            SqlDataAdapter dataAdapter = new SqlDataAdapter(CommandText, ConnectionString);
 
            DataSet ds = new DataSet();
            dataAdapter.Fill(ds, "Ламинат");
            dataGridView1.DataSource = ds.Tables["Ламинат"].DefaultView;
                   
        }
       
    }

} 


Ошибка следующая:При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удаленные соединения. (provider: SQL Network Interfaces, error: 25 - Недопустимая строка подключения)

Я подключался не к серверу, а к файлу базы данных SQL.. Может здесь ошибка Data Source=.\SQLEXPRESS?


Как вообще можно подключить БД? Я пытаюсь работать с БД на WPF... Но не получается подключить ни там, ни на WinForms....

3. И еще вопрос, чтобы новую тему не создавать...Какая последняя версия по ADO.NET? 3.5? Какой тогда учебник можно почитать, чтобы с нуля..по 3.5 нашел только один, и то на английском..пойдет по 2.0?
И еще. Отличается ли написание когда на WPF и WinForms?



Спасибо большое заранее.. Извиняюсь что столько вопросов..
...
Рейтинг: 0 / 0
12.02.2013, 22:08
    #38148607
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
panda30Здравствуйте. У меня несколько вопросов)
1. Создал большую БД в MSSQL Server 2012. Сделал одно тестовое представление... Добавляю в VS2012 БД через Entity Data Model. А у меня вот такая ошибка вылезает после добавления:

Error 6002: В таблице или представлении "C:\USERS\ALEXANDER\DESKTOP\STROYMAG\STROYMAG.MDF.dbo.Вот" не определен первичный ключ. Ключ был выведен, а определение таблицы или представления было создано в режиме только для чтения. C:\Users\Alexander\Desktop\StroyMag\StroyMag\StroyMag\Model1.edmx

Что это такое?



Это значит, что таблица без первичного ключа. Например.



Код: sql
1.
2.
3.
4.
CREATE TABLE [dbo].[Table_1](
	[zzz] [nchar](10) NOT NULL,
	[data] [nchar](10) NOT NULL
) ON [PRIMARY]



В этом случае, дизайнер EDM генерит в Storage модели read-only вьюху
Код: sql
1.
2.
3.
4.
5.
6.
7.
<EntitySet Name="Table_1" EntityType="DB1Model.Store.Table_1" store:Type="Tables" store:Schema="dbo" store:Name="Table_1">
	<DefiningQuery>SELECT 
	  [Table_1].[zzz] AS [zzz], 
	  [Table_1].[data] AS [data]
	  FROM [dbo].[Table_1] AS [Table_1]
	</DefiningQuery>
</EntitySet>



Считает ключем все колонки твоей таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
        <EntityType Name="Table_1">
          <Key>
            <PropertyRef Name="zzz" />
            <PropertyRef Name="data" />
          </Key>
          <Property Name="zzz" Type="nchar" Nullable="false" MaxLength="10" />
          <Property Name="data" Type="nchar" Nullable="false" MaxLength="10" />
        </EntityType>



о чем и говорит:

"...
Message 1 The table/view 'DB1.dbo.Table_1' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view. Model1.edmx 0 1 ConsoleApplication27
..."



Определите в своей таблице в схеме БД первичный ключ для таблицы dbo.Вот
...
Рейтинг: 0 / 0
12.02.2013, 22:09
    #38148609
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Lord British, Вот - это запрос, а не таблица... а там первичный ключ зачем..?
...
Рейтинг: 0 / 0
12.02.2013, 22:10
    #38148610
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Lord British, да и Вот - запрос тестовый. Я делал из одной таблицы его, в котором есть первичный ключ. И в запрос добавил все поля. В том числе и ключевое поле
...
Рейтинг: 0 / 0
12.02.2013, 22:23
    #38148621
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
panda30Lord British, да и Вот - запрос тестовый. Я делал из одной таблицы его, в котором есть первичный ключ. И в запрос добавил все поля. В том числе и ключевое поле

Вьюха чтоли? С этого и следовало начать.

Это не ошибка. Он генерит предупреждение, что сам определил ключ для твоего импортированного View. Ключ необходим для EF для правильной работы его кишок хотябы для его IdentityMap.

Если для вашей View ID остался ключем отметьте только его вручную в дизайнере как ключем.

в edmx выкиньте вручную у соответствующего определения Entity теги <DefiningQuery/> и она перестанет быть реадонли и будет генерить CRUD как для таблицы. Как вы это рулите на уровне БД ей до лампочки.
...
Рейтинг: 0 / 0
12.02.2013, 22:30
    #38148624
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Lord British, Спасибо:) а в дизайнере он был как первичный ключ обозначен))
...
Рейтинг: 0 / 0
12.02.2013, 22:35
    #38148630
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
panda30Lord British, Спасибо:) а в дизайнере он был как первичный ключ обозначен))

он мог автоматом сгенерить ключ из всех полей таблицы. обратите на это внимание, другие поля не помечены как часть ключа? :).
...
Рейтинг: 0 / 0
12.02.2013, 22:38
    #38148632
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Lord British, Неа)другие нормально) а вот еще не подскажете) я просто новичок. Курсач задали делать. А мне понравилось работать с БД. вот и хочу научиться)
Вот я запрос вывел, а мне, например, какие то столбцы не нужны.. Где мне их убрать?) на WinForms было свойство, насколько я помню. Прям через интерфейс VS.. а как здесь можно, может через код, убрать лишние столбцы?)
Вообще к запросу я так цепляюсь..
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace WpfApplication2
{
    
    public partial class MainWindow : Window
    {
        StroyMagEntities data = new StroyMagEntities();
        public MainWindow()
        {
            InitializeComponent();
            IEnumerable<Вот> Вот = data.Вот;
            data1.ItemsSource = data.Вот.ToArray();        }
    }
}


Это правильно?)или как то по другому надо?)
...
Рейтинг: 0 / 0
12.02.2013, 22:43
    #38148638
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
panda30,

выводите только то что нужно

[xml]
<Window x:Class="WpfApplication1.MainWindow"
xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Col1Property}"></DataGridTextColumn>
<DataGridTextColumn Header="Col2" Binding="{Binding Col2Property}"></DataGridTextColumn>
<DataGridTextColumn Header="Col3" Binding="{Binding Col3Property}"></DataGridTextColumn>
<DataGridTextColumn Header="Col4" Binding="{Binding Col4Property}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

[/xml]
...
Рейтинг: 0 / 0
12.02.2013, 22:50
    #38148643
panda30
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по подключению БД
Lord British, а вот сюда что надо вписать?
Binding="{Binding Col1Property }"? Как указать, что мне надо именно из определенной таблицы выбрать? И тогда код на C# тот не нужен?
У меня таблица Вот, например. Называются столбцы Первый и Второй. А мне надо, например, чтобы только столбец "Второй" выводился..
Извините за тупые вопросы.. Просто даже элементарно учебник по ADO.NET 3.5 не могу найти( вот и приходится тупить...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вопросы по подключению БД / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]