Ошибка неправильный синтаксис около конструкции

  • Remove From My Forums

 locked

Неправильный синтаксис около конструкции «)» ?

  • Общие обсуждения

  • Всем привет, возник вопрос по разработке приложений с помощью ASP.NET

    Проблема в этой ошибке

     SqlDataSource1.DataBind();
    GridView2.DataBind(); — Неправильный синтаксис около конструкции «)».
    Literal3.Text = «Всего найдено — » + GridView2.Rows.Count.ToString();

    Подскажите пожалуйста как это вылечить.

    • Перемещено

      6 апреля 2014 г. 12:59

    • Изменен тип
      Maksim MarinovMicrosoft contingent staff, Moderator
      11 апреля 2014 г. 7:07
      Тема неактивна

Цитата из документации Database Identifiers:

Rules for Regular Identifiers

  1. Embedded spaces or special characters are not allowed.

В именах параметров не разрешены пробелы.
Уберём из них пробелы и квадратные скобки.

Попутно исправим другие ошибки и недочёты: имя соединения (у вас оно почему-то названо connectionString), опасность потери ресурсов (используем using для устранения этого), использование устаревшего и опасного метода AddWithValue (заменим его на Add с указанием точного типа).

Кроме того, время_входаTextBox используется дважды. Будьте внимательны!

string sql = @"UPDATE Табель SET Статус = @Статус, [Код смены] = @КодСмены, [Время входа] = @ВремяВхода, [Время выхода] = @ВремяВыхода WHERE [Код сотрудника] = @КодСотрудника AND Дата = @Дата AND [Код табеля] = @КодТабеля";

using var connection = new SqlConnection(_connectionString);
connection.Open();

using var command = new SqlCommand(sql, connection);

command.Parameters.Add("КодТабеля", SqlDbType.Int).Value = textBox5.Text; // int.Parse(textBox5.Text)
command.Parameters.Add("КодСотрудника", SqlDbType.Int).Value = код_сотрудникаTextBox.Text;
command.Parameters.Add("Дата", SqlDbType.DateTime2).Value = датаDateTimePicker.Value;
command.Parameters.Add("Статус", SqlDbType.NVarChar).Value = comboBox1.Text;
command.Parameters.Add("КодСмены", SqlDbType.Int).Value = comboBox2.Text;
command.Parameters.Add("ВремяВхода", SqlDbType.DateTime2).Value = время_входаTextBox.Text;
command.Parameters.Add("ВремяВыхода", SqlDbType.DateTime2).Value = время_выходаTextBox.Text;

command.ExecuteNonQuery();

Благодаря использованию using соединение будет гарантировано закрыто, даже в случае возникновения исключения. Вызывать метод Close() не нужно.

Я не знаю, какие именно типы используются у вас в таблице, поэтому сами укажите правильные типы SqlDbType. При необходимости примените int.Parse и тому подобные методы. А лучше используйте NumericUpDown для ввода чисел вместо TextBox.

Почему не стоит использовать метод AddWithValue:
Can we stop using AddWithValue() already?
AddWithValue is evil!
AddWithValue is Evil
Достаточно прочитать любую из этих статей.

 none

Нужна помощь с построением условной конструкции

  • Вопрос

  • Приветствую!

    Помогите пожалуйста построить условную конструкцию.

    если есть ID (например) $id, то 
        update dbo.Table_1 set db_time = '$db_t', db_size = '$db_s', db_check = '$db_c', data_time = '$data_t', data_size = '$data_s', data_check = '$data_c', pst_time = '$pst_t', pst_size = '$pst_s', pst_check = '$pst_c', system_time = '$system_t', system_size = '$system_s', system_check = '$system_c'
    иначе
        INSERT INTO dbo.Table_1 (id, server, db_time, db_size, db_check, data_time, data_size, data_check, pst_time, pst_size, pst_check, system_time, system_size, system_check) VALUES ('$id', '$srv', '$db_t', '$db_s', '$db_c', '$data_t', '$data_s', '$data_c', '$pst_t', '$pst_s', '$pst_c', '$system_t', '$system_s', '$system_c')

    Если не учитывать обращение к самой БД, то в PowerShell, я бы это сделал так:

    $select = "select * from dbo.Table_1 where id like $id"
    if ($select){
        update dbo.Table_1 set db_time = '$db_t', db_size = '$db_s', db_check = '$db_c', data_time = '$data_t', data_size = '$data_s', data_check = '$data_c', pst_time = '$pst_t', pst_size = '$pst_s', pst_check = '$pst_c', system_time = '$system_t', system_size = '$system_s', system_check = '$system_c'
    }
    else
    {
        INSERT INTO dbo.Table_1 (id, server, db_time, db_size, db_check, data_time, data_size, data_check, pst_time, pst_size, pst_check, system_time, system_size, system_check) VALUES ('$id', '$srv', '$db_t', '$db_s', '$db_c', '$data_t', '$data_s', '$data_c', '$pst_t', '$pst_s', '$pst_c', '$system_t', '$system_s', '$system_c')
    }

    А как это сделать на T-SQL, я, пока, понять не могу

    Предполагаю, что это должно быть как-то так:
    103 — ID (для каждого отчета от регионального сервера свой ID)

    use Regions_Report_Backup;
    go
    if OBJECT_ID ('dbo.Table_1', 'id') is null
        insert into dbo.Table_1 (id, server, db_time, db_size, db_check, data_time, data_size, data_check, pst_time, pst_size, pst_check, system_time, system_size, system_check) value (103, 'S10303', '2022.09.28', '4340133137', 'true', '2022.09.30', '7791564650', 'true', '2022.09.29', '5337385942', 'true', '2022.09.24', '27660377957','true')
    else
        update dbo.Table_1 set db_time = '2022.09.28', db_size = '4340133137', db_check = 'true', data_time = '2022.09.30', data_size = '7791564650', data_check = 'true', pst_time = '2022.09.29', pst_size = '5337385942', pst_check = 'true', system_time = '2022.09.24', system_size = '27660377957', system_check = 'true'
    go

    Но сиквел выдают ошибку:
    Сообщение 102, уровень 15, состояние 1, строка 2
    Неправильный синтаксис около конструкции «value».
    почему он ругается на VALUE?

    • Изменено

      30 сентября 2022 г. 9:54

Ответы

  • Привет,

    Если я не ошибаюсь, то синтаксис должен быть values:

    insert into dbo.Table_1 (id, server, db_time, db_size, db_check, data_time, data_size, data_check, pst_time, pst_size, pst_check, system_time, system_size, system_check)

    values (103, 'S10303', '2022.09.28', '4340133137', 'true', '2022.09.30', '7791564650', 'true', '2022.09.29', '5337385942', 'true', '2022.09.24', '27660377957','true')

    INSERT INTO table_name (column1, column2, column3,
    …)

    VALUES (value1, value2, value3,
    …);


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется «как есть» без каких-либо гарантий. Не забывайте помечать сообщения как ответы и полезные,
    если они Вам помогли.

Ошибка Microsoft SQL Server: SQL SERVER-Msg 102, Уровень 15, состояние 1, строка 2 неправильный синтаксис рядом‘) ‘ или msg 102 уровень 15 состояние 1 строка 3 Неправильный синтаксис рядом ‘ ‘

Описание ошибки:

Это сообщение об ошибке возникает, если мы используем функцию GETDATE() like в качестве параметра хранимой процедуры или оператора функции. или вторая ошибка относится к проблеме, когда вставка данных может быть решена, сделав столбец не нулевым, а также может быть сделана по умолчанию для некоторого значения.

Фактическое сообщение об ошибке:

Msg 102, Level 15, State 1, Line 2 Incorrect syntax near ‘)’.’

Решение:

Эта проблема может быть решена с помощью локальной переменной для хранения значения Getdate() вместо передачи функции GETDATE() в качестве параметра непосредственно в операторе execute, а затем передать назначенную локальную переменную в качестве параметра.

или другое сообщение об ошибке подобное приведено ниже

Еще одно сообщение об ошибке:

msg 102 level 15 state 1 line 3 incorrect syntax near ' '

Решение:

Эту проблему при вставке данных можно решить, сделав столбец не нулевым, а также можно сделать значение по умолчанию некоторым значением.

alter table tablename
add default 0 for person_id

или

alter table TableName
Alter Column ColumnName NOT NULL SET DEFAULT 0

Пожалуйста, обратите внимание, что alter column может потребоваться удалить столбец и создать его заново, что не есть хорошо, когда таблица очень большого размера.

SQL Server 2012 Enterprise SQL Server 2012 Business Intelligence SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Express Еще…Меньше

Пакет обновления 1 для Microsoft SQL Server 2012 распространяются как один загружаемый файл. Учитывая, что исправления являются накопительными, каждый выпуск содержит все исправления и все исправления безопасности, которые были включены в Пакет обновления 1 для предыдущего SQL Server 2012 выпуска исправлений.

Симптомы

При выполнении инструкции Transact-SQL в SQL Server 2012, появляется следующее сообщение об ошибке:

Неправильный синтаксис около «begi».


Эта проблема возникает при выполнении следующих условий:

  • Инструкция содержит условие IF .

  • Условие IF не содержит инструкции BEGIN и END .

  • Условие IF следует блок BEGIN TRY .

  • Если блок перекомпилируется при выполнении запроса.

Решение

Информация о накопительном пакете обновления

Накопительное обновление 4 для SQL Server 2012 с пакетом обновления 1

Исправление, устраняющее эту проблему, сначала было выпущено в накопительное обновление 4. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:

2833645 накопительного обновления 4 для SQL Server 2012 с пакетом обновления 1Примечание. Учитывая, что построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2012 с пакетом обновления 1 выпуска исправлений. Мы рекомендуем рассмотреть применение последнего выпуска исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:

2772858 SQL Server 2012 выполняется построение, выпущенных после выпуска SQL Server 2012 Пакет обновления 1

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе «Относится к».

Дополнительные сведения

Чтобы воспроизвести данную проблему, выполните следующие инструкции Transact-SQL в SQL Server 2012:

DECLARE @i INT

IF object_id(‘tempdb..#temptable’) IS NOT NULL
DROP TABLE #temptable

CREATE TABLE #temptable (id INT)
INSERT INTO #temptable VALUES (1),(2),(3);

IF year(getdate())=2012 SELECT @i=(SELECT COUNT(*) AS nr FROM #temptable);
BEGIN TRY
SELECT ‘message’
END TRY

BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH

Временное решение

Чтобы обойти эту проблему, добавьте инструкции BEGIN и END IF условие.

Ссылки

Дополнительные сведения о добавочных модель обслуживания для SQL Server щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:

935897 добавочных модель обслуживания доступна из группы SQL Server для предоставления исправления для проблем, о которых сообщалось вДополнительные сведения о схеме именования для обновления SQL Server щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:

Пакеты обновлений схемы именования 822499 для программного обеспечения Microsoft SQL ServerДополнительные сведения о терминологии обновления программного обеспечения щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Понравилась статья? Поделить с друзьями:
  • Ошибка неправильный регион
  • Ошибка неправильный размер фотографии
  • Ошибка неправильный размер бумаги
  • Ошибка неправильный путь приложения windows 10
  • Ошибка неправильный параметр или аргумент