07.06.2020, 02:58 [+3 UTC]
в нашей команде: 4 600 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
05.06.2020, 04:11

Последний вопрос:
06.06.2020, 21:42
Всего: 152584

Последний ответ:
06.06.2020, 22:39
Всего: 260257

Последняя рассылка:
06.06.2020, 16:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
21.02.2019, 12:48 »
dar777
Это самое лучшее решение! [вопрос № 194654, ответ № 277498]
07.11.2019, 01:10 »
Гаяна
Спасибо вам огромное, простите, что забываю поблагодарить (( [вопрос № 196872, ответ № 279041]
08.09.2010, 18:43 »
Иванов П.С.
Отлично! Хороший ответ с объяснениями:) [вопрос № 179863, ответ № 262989]

РАЗДЕЛ • .NET Framework / C# / Java

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

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

Лучшие эксперты в этом разделе

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

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

Консультация онлайн # 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# будет !=

 

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

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15640 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39