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

В чем ошибка?

15.04.2017, 18:27. Показов 2940. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот у меня есть два запроса и оба неправильные ))
Где в них ошибка?

C#
1
2
3
4
SqlCommand insertRequestInfoCMD = new SqlCommand("INSERT INTO [Requests] (client_id) VALUES (@client_id) FROM [Auto] WHERE [state_number]='" + comboBox1.Text + "';", MyConnection);
                    insertRequestInfoCMD.Parameters.AddWithValue("@client_id", client_id);
                    insertRequestInfoCMD.Parameters.AddWithValue("@start_date", thisDay.ToString());
                    insertRequestInfoCMD.Parameters.AddWithValue("@status", status);
C#
1
2
3
SqlCommand insertProblemInfoCMD = new SqlCommand("INSERT INTO [client_problems] FROM [Problems] (client_id, problem_id) VALUES (@client_id, @problem_id) ", MyConnection);
                    insertProblemInfoCMD.Parameters.AddWithValue("@client_id", client_id);
                    insertProblemInfoCMD.Parameters.AddWithValue("@problem_id", comboBox2.SelectedValue);
И там и там указывает на FROM...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2017, 18:27
Ответы с готовыми решениями:

Ошибка method range of object global failed в чем ошибка
Sub ПроверкаВвода() Dim A As Range Dim B As Range Dim i As...

Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include...

Ошибка при передаче параметров в функцию. Объясните, ребят, пожалуйста, в чем ошибка
Есть функция, которую необходимо отобразить в виде линий уровня. Далее с помощью простого симплекс-метода нужно найти минимальное значение...

24
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
15.04.2017, 20:59
DenKG, ошибка в запросе. FROM указывается в SELECT запросах. Здесь по идее нужен такой код:
C#
1
2
3
SqlCommand insertProblemInfoCMD = new SqlCommand("INSERT INTO [client_problems] (client_id, problem_id) VALUES (@client_id, @problem_id)", MyConnection);
insertProblemInfoCMD.Parameters.AddWithValue("@client_id", client_id);
insertProblemInfoCMD.Parameters.AddWithValue("@problem_id", comboBox2.SelectedValue);
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
15.04.2017, 22:02  [ТС]
OwenGlendower, спасибо, действительно сглупил. А вот не могли бы тут помочь?
Ругается на то, что ссылка на объект не указывает на экземпляр объекта в строке n = num.ToString();.
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
        private void ClientProblems(int client_id)
        {
            string connectionString = @"Data Source=KING\SQLEXPRESS;Initial Catalog=project;Integrated Security=True";
            using (var MyConnection = new SqlConnection(connectionString))
            {
                MyConnection.Open();
                try
                {
                    SqlCommand getID = new SqlCommand("Select [request_id] from Requests where [client_id]='" + client_id + "'", MyConnection);
                    Object num;
                    string n;
                    getID.Connection = MyConnection;
                    num = getID.ExecuteScalar();
                    n = num.ToString();
                    SqlCommand insertProblemInfoCMD = new SqlCommand("INSERT INTO [client_problems] (request_id, problem_id) VALUES (@request_id, @problem_id)", MyConnection);
                    insertProblemInfoCMD.Parameters.AddWithValue("@request_id", n);
                    insertProblemInfoCMD.Parameters.AddWithValue("@problem_id", comboBox2.SelectedValue);
                    
                    SqlDataReader dataReader = insertProblemInfoCMD.ExecuteReader();
                    dataReader.Read();
                    client_id = Convert.ToInt16(dataReader.GetValue(0));
                }
                catch (Exception ex)
                {
 
                    MessageBox.Show(ex.Message);
                }
            }
        }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
15.04.2017, 23:00
DenKG, по всей видимости запрос ничего не возвращает. Далее мне непонятно зачем ты используешь DataReader с INSERT запросом - он же не возвращает данные. И далее зачем-то заново читаешь client_id который не похоже что должен измениться. Я бы сделал одним запросом
T-SQL
1
2
3
4
INSERT INTO [client_problems] (request_id, problem_id)
    SELECT TOP 1 [request_id], @problem_id
    FROM [Requests]
    WHERE [client_id]=@client_id
Правда у меня есть сомнения насчет результата - по задаче у каждого клиента всегда только один request?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void ClientProblems(int client_id)
{
    string connectionString = @"Data Source=KING\SQLEXPRESS;Initial Catalog=project;Integrated Security=True";
    using (var MyConnection = new SqlConnection(connectionString))
    {
        MyConnection.Open();
        try
        {
            var dbCmd = new SqlCommand("INSERT INTO [client_problems] (request_id, problem_id) SELECT TOP 1 [request_id], @problem_id FROM [Requests] WHERE [client_id]=@client_id");
            dbCmd.Connection = MyConnection;
            dbCmd.Parameters.AddWithValue("@client_id", client_id);
            dbCmd.Parameters.AddWithValue("@problem_id", comboBox2.SelectedValue);
            dbCmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
15.04.2017, 23:14  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
по задаче у каждого клиента всегда только один request?
Да. Только у каждого request 1 клиент
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
15.04.2017, 23:27
Цитата Сообщение от DenKG Посмотреть сообщение
Да. Только у каждого request 1 клиент
То что у каждого request один клиент это и так видно. Я про другое спрашиваю. В твоем коде есть запрос
T-SQL
1
Select [request_id] from Requests where [client_id]='...'
Подобная запись предполагает возможность получения нескольких строк - то есть у клиента может быть несколько request-ов. Однако запрос выполняется с помощью ExecuteScalar() который вернет значение из первой колонки первой строки - то есть одно значение. И это намекает что у клиента может быть только один request. Как все-таки на самом деле?
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
15.04.2017, 23:32  [ТС]
OwenGlendower, я решил, что лучше к каждой заявке присваивать id клиента, а не наоборот, поскольку клиент может быть один, а заявок с его участием может быть множество. Поэтому в таблице с клиентами поля с заявками нет.
Именно поэтому я сначала пытался получить id заявки и затем заносить ее в таблицу client_problems в поле request_id.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
15.04.2017, 23:42
DenKG, раз заявок несколько, то мое решение неверное. Объясни что ты пытался сделать. Вставить все заявки клиента в таблицу client_problems?
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
15.04.2017, 23:46  [ТС]
OwenGlendower, да, именно так. Вот даже сама таблица:
SQL
1
2
3
4
CREATE TABLE [dbo].[client_problems] (
    [request_id] INT NULL,
    [problem_id] INT NULL
);
Добавлено через 2 минуты
А в таблицу client_problems для столбца problem_id данные берутся отсюда:
SQL
1
2
3
4
5
CREATE TABLE [dbo].[Problems] (
    [problem_id] INT          IDENTITY (1, 1) NOT NULL,
    [problem]    VARCHAR (50) NULL,
    [price]      INT          NULL
);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
15.04.2017, 23:50
DenKG, возьми код в этом ответе и убери из запроса TOP 1.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
15.04.2017, 23:58  [ТС]
OwenGlendower, эм, а как же в request_id будет записываться id заявки?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
16.04.2017, 00:25
DenKG, с помощью вложенного запроса
T-SQL
1
2
3
4
INSERT INTO [client_problems] (request_id, problem_id)
    SELECT [request_id], @problem_id
    FROM [Requests]
    WHERE [client_id]=@client_id
Делается вставка в таблицу client_problems всех строк которые вернет SELECT
1
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
16.04.2017, 08:12  [ТС]
OwenGlendower, ну при таком способе моя таблица остается пустой.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
16.04.2017, 11:00
DenKG, скорее всего это потому что запрос по client_id ничего не возвращает о чем я уже тебе писал. Проверь работу запроса в SQL Server Management Studio.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
16.04.2017, 11:17  [ТС]
OwenGlendower,
T-SQL
1
2
3
4
INSERT INTO [client_problems] (request_id)
    SELECT [request_id]
    FROM [Requests]
    WHERE [client_id]=client_id
Результат:
(строк обработано: 23)

Добавлено через 4 минуты
Но я не знаю, как здесь может не возвращаться результат...
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
private void button3_Click(object sender, EventArgs e)
        {
            ClientProblems(Request());
        }
 
        private int Request()
        {
            string connectionString = @"Data Source=KING\SQLEXPRESS;Initial Catalog=project;Integrated Security=True";
            int client_id = 0;
            bool status = true;
            DateTime thisDay = DateTime.Today;
            using (var MyConnection = new SqlConnection(connectionString))
            {
                MyConnection.Open();
                try
                {
                    SqlCommand getID = new SqlCommand("Select [client_id] from Auto where [state_number]='" + comboBox1.Text + "'", MyConnection);
                    Object num;
                    string n;
                    getID.Connection = MyConnection;
                    num = getID.ExecuteScalar();
                    n = num.ToString();
 
                    SqlCommand insertRequestInfoCMD = new SqlCommand("INSERT INTO [Requests] (client_id, start_date, status) VALUES (@client_id, @start_date, @status)", MyConnection);
                    insertRequestInfoCMD.Parameters.AddWithValue("@client_id", n);
                    insertRequestInfoCMD.Parameters.AddWithValue("@start_date", thisDay.ToString("g"));
                    insertRequestInfoCMD.Parameters.AddWithValue("@status", status);
 
                    SqlDataReader dataReader = insertRequestInfoCMD.ExecuteReader();
                    dataReader.Read();
                    client_id = Convert.ToInt16(dataReader.GetValue(0));
                    return client_id;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return client_id;
                }
            }
        }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
16.04.2017, 11:22
DenKG, значит запрос верный. Проверяй его теперь с теми же данными которые используются в программе.
T-SQL
1
2
3
4
5
6
7
8
DECLARE @client_id int
DECLARE @problem_id int
SET @client_id = <значение из программы>
SET @problem_id = <значение из программы>
INSERT INTO [client_problems] (request_id, problem_id)
    SELECT [request_id], @problem_id
    FROM [Requests]
    WHERE [client_id]=@client_id
Цитата Сообщение от DenKG Посмотреть сообщение
Но я не знаю, как здесь может не возвращаться результат...
Очень просто. INSERT запрос не возвращает таблицу. Он только сообщает сколько строк было вставлено. Поэтому использовать SqlDataReader не имеет здесь смысла.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
16.04.2017, 11:42  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Проверяй его теперь с теми же данными которые используются в программе.
Выполняется. Только он выполняется 21 раз.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
16.04.2017, 11:45
DenKG, теперь раз запрос правильно выполняется в Management Studio запускаешь программу под отладчиком, смотришь она делает и думаешь почему запрос не работает из программы.

Добавлено через 24 секунды
Цитата Сообщение от DenKG Посмотреть сообщение
Только он выполняется 21 раз.
В смысле?
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
16.04.2017, 12:20  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В смысле?
В прямом. Ровно 21 раз для каждой проблемы...

Добавлено через 6 минут
Получается, что проблема здесь?
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
private int Request()
        {
            string connectionString = @"Data Source=KING\SQLEXPRESS;Initial Catalog=project;Integrated Security=True";
            int client_id = 0;
            bool status = true;
            DateTime thisDay = DateTime.Today;
            using (var MyConnection = new SqlConnection(connectionString))
            {
                MyConnection.Open();
                try
                {
                    SqlCommand getID = new SqlCommand("Select [client_id] from Auto where [state_number]='" + comboBox1.Text + "'", MyConnection);
                    Object num;
                    string n;
                    getID.Connection = MyConnection;
                    num = getID.ExecuteScalar();
                        n = num.ToString();
                        SqlCommand insertRequestInfoCMD = new SqlCommand("INSERT INTO [Requests] (client_id, start_date, status) VALUES (@client_id, @start_date, @status)", MyConnection);
                        insertRequestInfoCMD.Parameters.AddWithValue("@client_id", n);
                        insertRequestInfoCMD.Parameters.AddWithValue("@start_date", thisDay.ToString("g"));
                        insertRequestInfoCMD.Parameters.AddWithValue("@status", status);
                        SqlDataReader dataReader = insertRequestInfoCMD.ExecuteReader();
                        dataReader.Read();
                        client_id = Convert.ToInt16(dataReader.GetValue(0));
                        return client_id;
                }
                catch (Exception ex)
                {
 
                    MessageBox.Show(ex.Message);
                    return client_id;
                }
            }
        }
Добавлено через 27 минут
Я понимаю, что здесь cleint_id не возвращается, поскольку client_id = 0. Но как правильно это сделать?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
16.04.2017, 12:55
DenKG, client_id не возвращается потому что INSERT запрос ничего не возвращает. Сколько раз мне это нужно повторить чтобы ты это услышал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2017, 12:55
Помогаю со студенческими работами здесь

Ошибка "Stack around the variable 'text' was corrupted"
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка. #include &lt;iostream&gt; ...

В чем ошибка?По одной строке нормально в базу заходят,а две сразу вылетает ошибка?
INSERT INTO `jos_menu` (`id`, `menutype`, `name`, `alias`, `link`, `type`, `published`, `parent`, `componentid`, `sublevel`, `ordering`,...

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка?
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Ошибка 2 error LNK2019, не пойму в чем ошибка
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl game(void)&quot; (?game@@YAHXZ) в...

В чем ошибка? При запуске программы открывается консоль и сразу ошибка о завершении программы
К тому же выдает warning: deprecated conversion from string constant to 'char*' . #include &lt;iostream&gt; #include &lt;string.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru