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

Ошибка при добавлении имен фалов из папки в SQl

18.09.2020, 09:53. Показов 799. Ответов 13

Студворк — интернет-сервис помощи студентам
Бобрый всем день!
Люди добрые, помогите калике перехожему! Бьюс уже неделю с тривиальной задачей...

В общем задачка такая:
Есть папка с файлами, требуется разделить имя файла и добавить в БД в разные столбцы эти данные.
Решил через цикл и разделения имени файла сделать, имя файла разделяется, но добавить информацию не могу...
Просто информация в БД добавляется
Происходит ошибка при выполнении command.ExecuteNonQuery();

Имя файла выглядит во так:
172.16.16.129_01_20200918041929251.jpg

Код:
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
using System;
using System.Data.SqlClient;
using System.Data;
using System.IO;
 
 
namespace ConsoleApp3
{
    class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo dinfo = new DirectoryInfo(@"C:\SKZ");
            FileInfo[] files = dinfo.GetFiles("*_*_*.jpg");
            foreach (FileInfo filenames in files)
            {
                var fioParts = Path.GetFileNameWithoutExtension(filenames.ToString()).Split('_');
                // Вывод в консоль разделенного имени файла
                Console.WriteLine("IP адресс: {0}\nКанал: {1}\nДата.Время: {2}", fioParts[0], fioParts[1], fioParts[2]);
 
 
                string connectionString = @"Data Source=paraguay\TEST_SQL; Initial Catalog = Line_Detect; User Id=sa; Password = 12345678*E";
                string sqlExpression = "INSERT INTO FolderDate (Ip, DateTime) VALUES (fioParts[0], fioParts[2])";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
              
                    connection.Open();
                    SqlCommand command = new SqlCommand(sqlExpression, connection);
                    command.ExecuteNonQuery();
 
                }
 
            }
            Console.ReadLine();
        }
    }
}
БД:
SQL
1
2
3
4
5
6
CREATE TABLE [dbo].[FolderDate] (
    [Id]       NCHAR (10)     CONSTRAINT [DF_FolderDate_Id] DEFAULT ((1)) NOT NULL,
    [Ip]       NVARCHAR (MAX) NULL,
    [DateTime] NVARCHAR (MAX) NULL,
    CONSTRAINT [PK_FolderDate] PRIMARY KEY CLUSTERED ([Id] ASC)
);
Срин ошибки
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2020, 09:53
Ответы с готовыми решениями:

Ошибка при добавлении записей в базу SQL
Есть процедура на серве InsertTypePayment Вот код ее ALTER PROCEDURE . @TypeName VARCHAR(50) AS BEGIN INSERT INTO . ...

SQL ошибка при добавлении сущности со связью
Использую WCF Data Services 5.6.3.0 Схема базы такая: Пытаюсь добавить новую сущность OrderItemEntryEF в полученный...

Ошибка при добавлении float записи в Azure SQL
Есть таблица в бд с полем типа float, есть переменная тоже float которая образуется из строки так: string flVar2Str = "0,5"; ...

13
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
18.09.2020, 10:00
Зачем вы каждый раз в цикле создаете подключение ?
0
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 5
18.09.2020, 10:08  [ТС]
Даже и не знаю что на это ответить.
Наверное уже глаз замылился... А может туплю...

Спасибо, изменил код
public static void Main(string[] args)
{
string connectionString = @"Data Source=paraguay\TEST_SQL; Initial Catalog = Line_Detect; User Id=sa; Password = @gfrnbfc41322";
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
18.09.2020, 10:10
Вам ошибка сигнализирует не корректный SQL-запрос. Отладчиком ловите.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.09.2020, 12:29
string sqlExpression = "INSERT INTO FolderDate (Ip, [DateTime]) VALUES (fioParts[0], fioParts[2])"

Добавлено через 4 минуты
Зря Вы держите даты в текстовом формате. Будут заморочки при выборке по временным диапазонам
Кроме того, в имени файлов нет собственно времени (hh:mm:ss), поэтому на сервере вполне можно ограничиться типом date:
https://docs.microsoft.com/en-... rver-ver15
0
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 5
18.09.2020, 12:38  [ТС]
Не помогло, та же ошибка...
А в имени файла как раз есть полная дата вплоть до милисекунды.

172.16.16.129_01_20200918021337283.jpg
172.16.16.129_01_2020 09 18 02:13:37:283
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.09.2020, 12:40
И еще, если конечно следовать "классике" СУБД:
SQL
1
2
3
4
5
6
CREATE TABLE FolderDate(
  FId INT IDENTITY(1,1) PRIMARY KEY,
  FUsId INT UNIQUE NOT NULL,
  FDate DATE NOT NULL,
  FName VARCHAR(MAX) NOT NULL
)
0
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 5
18.09.2020, 12:42  [ТС]
Отладчик останавливается на команде command.ExecuteNonQuery();
И выдает ошибку System.Data.SqlClient.SqlException: "Incorrect syntax near '0'."
Облазил все возможные источники, проблему не понимаю...
0
Эксперт .NET
 Аватар для Usaga
14298 / 9383 / 1353
Регистрация: 21.01.2016
Сообщений: 35,374
18.09.2020, 12:42
Apactias, вы на свой SQL-запрос посмотрите. Ничего странного в VALUES не находите?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.09.2020, 12:50
Цитата Сообщение от Apactias Посмотреть сообщение
Не помогло, та же ошибка...
Посмотрите в отладчике что у Вас в переменной sqlExpression перед запуском Sqlcommand.
Вам же сказано, что ошибка где-то возле '0'

На будущее: при работе с нативным SQL следует динамически сформированное тело запроса предварительно выполнить в SQL клиенте (в случае с MS SQL Server - MS SQL Management Studio) в скрипте

SQL
1
2
3
4
5
USE MyDB
BEGIN TRANSACTION
 INSERT ... -- Ваш динамически созданный запрос
 SELECT * FROM TABLE -- Проверка выполнения 
ROLLBACK TRANSACTION  -- Откат БД до исходного состояния
Это избавить от многочисленных багов при отладке приложения.
1
Эксперт .NET
 Аватар для Usaga
14298 / 9383 / 1353
Регистрация: 21.01.2016
Сообщений: 35,374
18.09.2020, 12:54
Цитата Сообщение от MsGuns Посмотреть сообщение
Посмотрите в отладчике что у Вас в переменной sqlExpression перед запуском Sqlcommand.
Я и без отладчика скажу, что там:

C#
1
"INSERT INTO FolderDate (Ip, DateTime) VALUES (fioParts[0], fioParts[2])"
Осталось только, чтобы ТС ответил на вопрос, как СУБД должна понять что такое fioParts[0] и fioParts[2]
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.09.2020, 13:08
Ну и главное.
Учитесь пользоваться ORM.
Модель избавит Вас от необходимости руками лазить в "кишки" SQL-сервера: создания строки соединения, тел самих SQL запросов, в т.ч. с параметрами (параметрические запросы SQL-сервер обрабатывает много быстрее обычных), и много еще от чего.
Кроме того, ORM умеет "умно" управлять транзакциями, формируя пакеты запросов под "логику".

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Осталось только, чтобы ТС ответил на вопрос, как СУБД должна понять что такое fioParts[0] и fioParts[2]
Если бы ТС воспользовался советом в [10] ("На будущее.."), он бы увидел воочию чего натворил

Добавлено через 8 минут
Вместо

C#
1
 string SqlExpression = ''INSERT INTO FolderDate (Ip, [DateTime]) VALUES (fioParts[0], fioParts[2])";
Надо:

C#
1
 string SqlExpression = ''INSERT INTO FolderDate (Ip, [DateTime]) VALUES (" + fioParts[0] + ", " + fioParts[2] + ")";

Однако по-хорошему надо применять параметры
1
Эксперт .NET
 Аватар для Usaga
14298 / 9383 / 1353
Регистрация: 21.01.2016
Сообщений: 35,374
18.09.2020, 13:45
Apactias,

C#
1
2
3
4
5
6
7
8
9
10
11
12
                var connectionString = @"Data Source=paraguay\TEST_SQL; Initial Catalog = Line_Detect; User Id=sa; Password = 12345678*E";
                var sqlExpression = "INSERT INTO FolderDate (Ip, DateTime) VALUES (@ip, @dateTime)";
                using (var connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    var command = new SqlCommand(sqlExpression, connection);
 
                    command.Parameters.AddWithValue("ip", fioParts[0]);
                    command.Parameters.AddWithValue("dateTime", fioParts[2]);
 
                    command.ExecuteNonQuery();
                }
1
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 5
21.09.2020, 09:04  [ТС]
Спасибо всем за помощь!

ЗЫ. Буду учиться пользоваться ORM
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2020, 09:04
Помогаю со студенческими работами здесь

Ошибка при добавлении записи в SQL Server 2012
Добрый день, уважаемые. Очень нужна ваша помощь. Подскажите, пожалуйста. Есть база данных SQL Server 2012. В ней таблица MARA и...

Ошибка при добавлении записи в таблицу через SQL
Когда я активирую ADOQuery, происходит ошибка "commandtext does not return a resultset". Сам SQl запрос работает, строка в таблицу...

Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
Я только начинаю изучать ASP.NET и связанные с ним технологии, поэтому буду очень признателен за любую конструктивную критику с...

DataGrid + DataTable + БД MS Sql ошибка при изменении/добавлении записи
Доброго всем времени суток. Работаю с VS2015 несколько дней - тапками и табуретками прошу не бросаться. Словил ошибку, которую не могу...

Копировать файлы в папки при совпадении имен файла и папки
Добрый день. Задача такая, есть папка в которой содержатся файлы, каждый файл с уникальным именем, например "file1.txt",...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru