Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

972

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

608

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

353

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

309

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

300


ID: 400484

solowey

Профессор

96


ID: 401888

puporev

Профессор

53

Россия, Пермский край


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

Создание программ на программной платформе .NET Framework и языках С# и Java.

Администратор раздела: Коцюрбенко Алексей Владимирович (Старший модератор)


Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 2130
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 224
solowey
Статус: Профессор
Рейтинг: 96
 

Перейти к консультации №:
 

Консультация онлайн # 146010
Раздел: • .NET Framework / C# / Java
Автор вопроса: Штыхов Антон Евгеньевич
Дата: 04.10.2008, 21:04
Поступило ответов: 2

Теперь такая проблема:

В одном месте своего проекта пытаюсь внести данные в базу данных:

 public void AddGame(string Aht, string note, string sol, string end)
        {
            string SQL_String =
                "INSERT INTO Gold_Games_Table (Authors, Note, Solution, EndMessage)" +
                "VALUES(@Aht, @note, @sol, @end)";
            OleDbCommand comm = new OleDbCommand(SQL_String, conn);
            OleDbParameter param1 = new OleDbParameter("@Aht", OleDbType.Char, 50);
            param1.Value = Aht;
            OleDbParameter param2 = new OleDbParameter("@note", OleDbType.Char, 50);
            param2.Value = note;
            OleDbParameter param3 = new OleDbParameter("@sol", OleDbType.Char, 360);
            param3.Value = sol;
            OleDbParameter param4 = new OleDbParameter("@end", OleDbType.Char, 50);
            param4.Value = end;
            comm.Parameters.Add(param1);
            comm.Parameters.Add(param2);
            comm.Parameters.Add(param3);
            comm.Parameters.Add(param4);


            conn.Open();
            comm.Prepare();
            int rows = comm.ExecuteNonQuery();
            conn.Close();
        }

Комп заявляет о синтаксической ошибке в запросе в то время как подобная операция(правда для дргой таблицы) вопросов не вызвала:

   public void AddSolution(string temp,
            string name, decimal val)
        {
            string SQL_String =
                "INSERT INTO Problems_Desposition_Table (Name, Desposition, Steps)" +
                "VALUES( @name , @temp , @val)";
            OleDbCommand comm = new OleDbCommand(SQL_String, conn);
            OleDbParameter param1 = new OleDbParameter("@name", OleDbType.Char, 50);
            param1.Value = name;
            OleDbParameter param2 = new OleDbParameter("@temp", OleDbType.Char, 100);
            param2.Value = temp;
            OleDbParameter param3 = new OleDbParameter("@val", OleDbType.SmallInt, 0);
            param3.Value = val;
            comm.Parameters.Add(param1);
            comm.Parameters.Add(param2);
            comm.Parameters.Add(param3);

            conn.Open();
            comm.Prepare();
            int rows = comm.ExecuteNonQuery();
            conn.Close();
        }


В чем можетбыть проблема!

P.S: столбец Solution в базе данных имеет тип данных memo (это не может быть причиной!?)

Состояние: Консультация закрыта

Ответ # 231193 от DrakoN

Здравствуйте, Штыхов Антон Евгеньевич!
Ошибку в минифорум.
Да в этом может быть проблема.
А теперь основные рекмендации вместо OleDbType.Char используйте OleDbType.VarChar
А вообще так писать как вы написали не хорошо. Общие рекомендации. Выполняйте запрос внутри Try Catch.
conn.Open();
comm.Prepare();
int rows = comm.ExecuteNonQuery();

В этом место проверяйте что int => 1. добавьте транзакции если условие не выполнилось делайте RollBack().



Консультировал: DrakoN
Дата отправки: 05.10.2008, 02:47

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 231284 от Челноков Виктор Альбертович

Здравствуйте, Штыхов Антон Евгеньевич!
Конечно желателен полный текст ошибки.
Попробуйте поменять тип для параметра param3 c
OleDbType.Char на OleDbType.WChar так как в поле memo текст сохраняется в Юникод.
А в другом примере передаете param3 decimal в SmallInt . Это тоже ошибка.
Обратите внимание.


Консультировал: Челноков Виктор Альбертович
Дата отправки: 06.10.2008, 07:05

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 146010
Штыхов Антон Евгеньевич

1

= общий = |  05.10.2008, 08:35

Вовремя выполнения у казывает на comm.Prepare(); Syntax error in INSERT INTO statement.

DrakoN

2

= общий = |  05.10.2008, 08:36

удалите эту строку она там не нужна. Должно и без нее работать.

DrakoN

3

= общий = |  05.10.2008, 08:37

Тогда во время выполнения если что не так вам вернет ошибку сама БД. И скажет вам что ей не понравилось. После отладки по идее можно вернуть

DrakoN

4

= общий = |  05.10.2008, 08:39

ах да и еще

[q=]  "INSERT INTO Gold_Games_Table (Authors, Note, Solution, EndMessage)" +
                "VALUES(@Aht, @note, @sol, @end)";[/q]

замените на
[q=]  "INSERT INTO Gold_Games_Table (Authors, Note, Solution, EndMessage) " +
                "VALUES (@Aht, @note, @sol, @end)";[/q]

пробелы не помешают.

Штыхов Антон Евгеньевич

5

= общий = |  05.10.2008, 10:07


убераю comm.Prepare(); но ощибка переходит на слудушую страку!

Но вы правы rows у меня = 0! smile

Немоглибы вы написать мне исправленый фрагмент кода! Спасибо зарание! smile

Штыхов Антон Евгеньевич

6

= общий = |  05.10.2008, 16:14

Написал так:

string SQL_String =
                "INSERT INTO Gold_Games_Table (Authors, Note, Solution, EndMessage)" +
                "VALUES (?, ?, ?, ?)";
            OleDbCommand comm = new OleDbCommand(SQL_String, conn);
            OleDbParameter param1 = new OleDbParameter("@Aht", OleDbType.Char, 50);
            param1.Value = Aht;
            OleDbParameter param2 = new OleDbParameter("@note", OleDbType.Char, 50);
            param2.Value = note;
            OleDbParameter param3 = new OleDbParameter("@sol", OleDbType.VarChar, 360);
            param3.Value = sol;
            OleDbParameter param4 = new OleDbParameter("@end", OleDbType.Char, 50);
            param4.Value = end;
            comm.Parameters.Add(param1);
            comm.Parameters.Add(param2);
            comm.Parameters.Add(param3);
            comm.Parameters.Add(param4);


            try
            {
                conn.Open();
                comm.Prepare();
                int rows = comm.ExecuteNonQuery();
            }
            finally { conn.Close(); }
        }


результат тот же! smile

DrakoN

7

= общий = |  05.10.2008, 23:47

а что в Catch пишет добавьте

Сatch (Exception ex)
{
MessageBox.Show(ex.Message)
}

вроде верно написал


попробуйте в качестве теста заменить Memo на String(8000)

DrakoN

8

= общий = |  05.10.2008, 23:49

 finally { conn.Close(); }


это не верный код
Добавьте проверку isNot = null и после закрывайте

Штыхов Антон Евгеньевич

9

= общий = |  06.10.2008, 08:18

Цитата:
это не верный код
Добавьте проверку isNot = null и после закрывайте


isNot нет такого оператора!

Челноков Виктор Альбертович

10

= общий = |  06.10.2008, 09:49

Попробуйте следующий код
public void AddGame(string Aht, string note, string sol, string end)
{ string SQL_String = "INSERT INTO Gold_Games_Table (Authors, Note, Solution, EndMessage)" +
"VALUES(?, ?, ?, ?)";
OleDbCommand comm = new OleDbCommand(SQL_String, conn);
comm.Parameters.AddRange(new System.Data.OleDb.OleDbParameter[] {
new System.Data.OleDb.OleDbParameter("Authors", System.Data.OleDb.OleDbType.WChar, 50, "Authors"),
new System.Data.OleDb.OleDbParameter("Note", System.Data.OleDb.OleDbType.WChar, 50, "Note"),
new System.Data.OleDb.OleDbParameter("Solution", System.Data.OleDb.OleDbType.WChar, 1024, "Solution"),
new System.Data.OleDb.OleDbParameter("EndMessage", System.Data.OleDb.OleDbType.WChar, 50, "EndMessage")})
comm.Parameters[0].Value = Aht;
comm.Parameters[1].Value = note;
comm.Parameters[2].Value = sol;
comm.Parameters[3].Value = end;
conn.Open();
int rows = comm.ExecuteNonQuery();
conn.Close();
}

DrakoN

11

= общий = |  06.10.2008, 14:43

isNot нет такого оператора!
cорри это VB.Net в C# будет !=

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