Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17

Поиск по уникальному значению C#, SQL

25.11.2015, 00:53. Показов 2208. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!
за ранее спасибо за любой совет и помощь.

делаю приложение в которое входит БД, имею три таблицы.
1 таблица: Id, Name, INN, KPP.
2 таблица: Id, Region, Address, Phone, Email.
3 таблица: Id, Manager, Phone.

Как вы поняли это клиентская база. Каждому клиенту привязаны по Id его реквизиты и контак - менеджер.
Суть, реализовать вывод всей информации о клиенте из 3х таблиц по его Id. т.е. зная Id собрать и вывести всю инфу.
Я почитал про поиск в бд через "SELECT * FROM [] WHERE []" и "SELECT * FROM [] WHERE [] LIKE %" но это не подходит.
Знаю что можно вывести через связанные dataGridView но это не нужно.
Делаю так в первой форме dataGridView по нажатию на клиента берем его Id и передаем во вторую форму где и должна появляться вся инфа.
Пока сделал передачу Id и на этом заглох:
C#
1
2
3
4
5
6
7
8
9
10
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            rekvClient rekv = new rekvClient();
            rekv.CompanyId = dataGridView.Rows[e.RowIndex].Cells[0].Value.ToString();
            rekv.ShowDialog();
            if (rekv.DialogResult == DialogResult.OK)
            {
                SQLFunc.Refresh(this.dataGridView);
            }
        }
Есть другой способ поиска по таблица по заданному ключевому полю?
Прошу подсказку где почитать или пример.
Благодарю всех за внимание!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2015, 00:53
Ответы с готовыми решениями:

Косолидация нескольких таблиц по числовому уникальному значению
Нужна ваша помощь! Имеем таблицы (больше 10-ти), состоящие из трех столбцов. Первый столбец - уникальное число (номер площадки), в...

Присвоить номер каждому уникальному значению в столбце
Добрый вечер Прошу помощи с файлом в приложении. Столбец А необходимо снабдить формулой, которая будет присваивать один и тот же...

Объединить записи по Уникальному значению, чтобы отображалось количество в каждую дату
Нужно чтобы вместо фамилии отображалось количество клиентов за каждую дату. Заранее спасибо

22
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.11.2015, 10:09
SQL
1
2
3
4
SELECT t1.*,Region, Address, t2.Phone, Email,  Manager, t3.Phone FROM table1 t1 
INNER JOIN table2 t2 ON t1.id=t2.id
INNER JOIN table3 t3 ON t1.id=t3.id
WHERE t1.Id=1
Если какая-то из таблиц может быть не заполненной данными, то вместо inner join использовать left join
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
25.11.2015, 23:11  [ТС]
таблицы все заполнены, с заполнением нет проблем

нужно реализовать сбор информации о клиенте и вывести ее

Добавлено через 12 часов 24 минуты
можешь объяснить логику примера? не силен в SQL
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.11.2015, 09:55
Цитата Сообщение от Jonakel Посмотреть сообщение
можешь объяснить логику примера? не силен в SQL
https://ru.wikipedia.org/wiki/Join_%28SQL%29
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 12:10  [ТС]
разобрался. появилась еще одна проблема: если мы в первой таблице генерируем Id через функцию NEWID(), как полученный Id передать во вторую таблицу в поле Id

Добавлено через 58 минут
вообщем по id разобрался через переменную буду передавать
SQL
1
DECLARE @id uniqueidentifier; SET @id = NEWID()
осталась проблема с выводом всей информации

Добавлено через 25 минут
вот мои таблицы


формирую запрос вот так

C#
1
2
3
4
5
6
7
8
9
10
11
12
static public void CollectInfo(DataGridView dataGridView)
        {
            conCrmData.Open();
            SqlDataAdapter dataAdapter = new SqlDataAdapter("
            SELECT * FROM clientData 
            INNER JOIN rekvClient ON clientData.Id = rekvClient.IdClient 
            INNER JOIN partnerData ON clientData.Id = partnerData.IdRegion", conCrmData);
            DataTable dataTable = new DataTable();
            dataAdapter.Fill(dataTable);
            dataGridView.DataSource = dataTable;
            conCrmData.Close();
        }
но ничего не выводиться.
может что то не так?
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
26.11.2015, 12:27
Цитата Сообщение от Jonakel Посмотреть сообщение
если мы в первой таблице генерируем Id через функцию NEWID(),
показывай insert свой
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 13:04  [ТС]
c id я разобрался
но если надо вот insert
Кликните здесь для просмотра всего текста

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
static public void Insert(string CompanyName, string INN, string KPP, string Region, string Address, string Phone, string Email)
        {
            try
            {
                conCrmData.Open();
                SqlCommand cmdInsert = new SqlCommand("DECLARE @id uniqueidentifier; SET @id = NEWID();
                INSERT INTO [clientData] ([Id], [CompanyName], [INN], [KPP], [Region]) 
                VALUES (@id, @CompanyName, @INN, @KPP, @Region); 
                INSERT INTO [rekvClient] ([IdClient], [Address], [Phone], [Email]) 
                VALUES (@id, @Address, @Phone, @Email)", conCrmData); 
                cmdInsert.Parameters.AddWithValue("@CompanyName", CompanyName);
                cmdInsert.Parameters.AddWithValue("@INN", INN);
                cmdInsert.Parameters.AddWithValue("@KPP", KPP);
                cmdInsert.Parameters.AddWithValue("@Region", Region);
                cmdInsert.Parameters.AddWithValue("@Address", Address);
                cmdInsert.Parameters.AddWithValue("@Phone", Phone);
                cmdInsert.Parameters.AddWithValue("@Email", Email);
                cmdInsert.ExecuteNonQuery();
            }
            catch (SqlException exeption)
            {
                MessageBox.Show(exeption.ToString());
            }
            finally
            {
                conCrmData.Close();
            }
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
26.11.2015, 13:18
читай про identity и output для insert
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 14:02  [ТС]
Предлагаете так использовать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE [dbo].[clientData] (
    [Id]          UNIQUEIDENTIFIER NOT NULL IDENTITY,
    [CompanyName] NVARCHAR (50)    NULL,
    [INN]         NVARCHAR (50)    NULL,
    [KPP]         NVARCHAR (50)    NULL,
    [Region]      NVARCHAR (50)    NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
 
INSERT INTO [clientData] ([CompanyName], [INN], [KPP], [Region])
VALUES (@CompanyName, @INN, @KPP, @Region)
INSERT INTO [rekvClient] ([Address], [Phone], [Email]) 
VALUES (@@IDENTITY, @Address, @Phone, @Email)
Но сейчас вопрос не в этом.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
26.11.2015, 14:27
Цитата Сообщение от Jonakel Посмотреть сообщение
@@IDENTITY
вот тут можно грабли знатные отхватить
не зря я про output говорил
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 14:50  [ТС]
сейчас не в этом косяк
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.11.2015, 15:32
Цитата Сообщение от Jonakel Посмотреть сообщение
но ничего не выводиться.
может что то не так?
Цитата Сообщение от Jonakel Посмотреть сообщение
INNER JOIN partnerData ON clientData.Id = partnerData.IdRegion
Мне как-то трудно представить связь между id клиента и id региона. Если же это действительно одно и то же, то возникает вопрос, а где же уникальный идентификатор таблицы partnerData
Цитата Сообщение от Jonakel Посмотреть сообщение
SELECT * FROM
Так не надо писать, особенно когда в запросе 3 таблицы. Перечисляйте поля явно.

Замените inner на left в запросе и сразу увидите,какие данные не соответствуют.
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 16:26  [ТС]
в таблицах поля Id, IdClient и IdRegion для каждой записи будет 1 и тот же гуид в трех таблицах

приложил картинку (сделал только 2 таблицы, третья просто аналогична первым двум)

вот, если мы выбираем id под номером 1 то нужно вывести всю информацию из 3х таблиц под id = 1
Миниатюры
Поиск по уникальному значению C#, SQL  
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.11.2015, 18:30
Цитата Сообщение от Jonakel Посмотреть сообщение
1 и тот же гуид
Это многое объясняет. Значит они разные. id делайте int или bigint, а uniqueidentifier должен быть уникальным для каждой таблицы.
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
26.11.2015, 21:36  [ТС]
uniqueidentifier разве не может быть одинаковым?
вот сделал тест
первые 2 как выглядят таблицы 3 результат вывода после добавления
Миниатюры
Поиск по уникальному значению C#, SQL   Поиск по уникальному значению C#, SQL   Поиск по уникальному значению C#, SQL  

0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
27.11.2015, 10:45
Вставка созданного uniqueidentifier должна быть примерно такой:
SQL
1
2
3
4
5
6
7
8
DECLARE @guid uniqueidentifier
SET @guid = NEWID()
INSERT INTO Table1
SELECT @guid, ...
 
INSERT INTO Table2
SELECT @guid, ...
--или SELECT @guid,... from Table1
Чтобы не было никаких конвертаций.
В таблицу rekvClient добавьте первичный ключ. Если у вас ошибок нет, то всё должно работать нормально. Приведите пример кода вставки записей.
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
27.11.2015, 11:09  [ТС]
вот как делаю вставку записей в бд, пока что 3 таблицу не трогаю
Кликните здесь для просмотра всего текста
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
        static public void Insert(string CompanyName, string INN, string KPP, string Region, string Address, string Phone, string Email)
        {
            try
            {
                conCrmData.Open();
                SqlCommand cmdInsert = new SqlCommand(
"DECLARE @id uniqueidentifier; 
 SET @id = NEWID();
 INSERT INTO [clientData] ([Id], [CompanyName], [INN], [KPP], [Region]) 
 VALUES (@id, @CompanyName, @INN, @KPP, @Region); 
 INSERT INTO [rekvClient] ([IdClient], [Address], [Phone], [Email]) 
 VALUES (@id, @Address, @Phone, @Email)", conCrmData); 
                cmdInsert.Parameters.AddWithValue("@CompanyName", CompanyName);
                cmdInsert.Parameters.AddWithValue("@INN", INN);
                cmdInsert.Parameters.AddWithValue("@KPP", KPP);
                cmdInsert.Parameters.AddWithValue("@Region", Region);
                cmdInsert.Parameters.AddWithValue("@Address", Address);
                cmdInsert.Parameters.AddWithValue("@Phone", Phone);
                cmdInsert.Parameters.AddWithValue("@Email", Email);
                cmdInsert.ExecuteNonQuery();
            }
            catch (SqlException exeption)
            {
                MessageBox.Show(exeption.ToString());
            }
            finally
            {
                conCrmData.Close();
            }
        }
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
27.11.2015, 14:59
Как запрос формируется?
1
7 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 17
27.11.2015, 15:59  [ТС]
SQL
1
2
3
4
5
6
 DECLARE @id uniqueidentifier; 
 SET @id = NEWID();
 INSERT INTO [clientData] ([Id], [CompanyName], [INN], [KPP], [Region]) 
 VALUES (@id, @CompanyName, @INN, @KPP, @Region); 
 INSERT INTO [rekvClient] ([IdClient], [Address], [Phone], [Email]) 
 VALUES (@id, @Address, @Phone, @Email)
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
27.11.2015, 16:03
Я имел в виду не вставку данных, а выборку. Из программы на C#.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2015, 16:03
Помогаю со студенческими работами здесь

Поиск по не уникальному полю
Доброго времени суток. Создаю БД на Firebird для введения бланков анализов, клиент на Delphi, столкнулся со следующими проблемами: ...

Поиск по уникальному идентификатору среди справочника
всем прювет :) собстна вопрос ясен из названия темы - "Поиск по уникальному идентификатору среди справочника". задача: есть...

SQL Выборка по значению DBText
Доброго времени суток! Подскажите по такому вопросу: Есть форма с реквизитами организации. Несколько компонентов DBText. Требуется -...

MyDictionary: сортировка по ключу, поиск значения по ключу, поиск ключа по значению
Задан интерфейс ІMyDictionary. Его реализует класс MyDictionary, который позволяет определить коллекцию пар "ключ-значение". ...

Sql-запрос по значению, введенному в Edit
Добрый день всем! Помогите пожалуйста с запросом. Работаю с Delphi7, база данных Access, использую ADOQuery Как написать запрос (в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru