1 Востаннє редагувалося FakiNyan (07.07.2013 16:04:29)

Тема: C# і MySQL Connector, data truncated for column

Привіт. Схема така. Є клієнт і сервер. Коли клієнт закривається, на сервер відправляється повідомлення. Коли сервер його приймає, він заносить отримані дані від клієнта в базу даних. Дані собою являють три координати, котрі визначають положення персонажа клієнта в просторі. Вони мають тип float. Для зміни значень в таблиці я використовую ось таку збережену процедуру

DROP PROCEDURE `SP_SetCoor`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_SetCoor`(IN `ch_id` INT(20), IN `u_x` FLOAT(20), IN `u_y` FLOAT(20), IN `u_z` FLOAT(20)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
BEGIN
update coor_t SET x=u_x,y=u_y,z=u_z where id=ch_id;
END

Вона приймає 4 значення -  id персонажа і значення трьох координат. Так от, дані на сервер приходять цілісінькі, але коли я намагаюсь їх змінити в базі за допомогою процедури, то вилазить якась помилка. Ось код

 void SetNewCoor(ConnectionInfo conn)
            {
                int id = conn.char_id;
                float x = conn.x;
                float y = conn.y;
                float z = conn.z;
                string req = "call SP_SetCoor('"+id+"','"+x+"','"+y+"','"+z+"')";
                MySqlCommand myCommand = new MySqlCommand();
                myCommand.CommandText = req;
                myCommand.Connection = myConnection;
                try
                {
                    myConnection.Open();
                    myCommand.ExecuteScalar();
                    myConnection.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine(" x = {0}, y = {1}, z = {2}",x,y,z);
                    Console.WriteLine(e.Message);
                    myConnection.Close();
                }
            }

https://не-дійсний-домен/3x5HS.png
Що я роблю не так? https://не-дійсний-домен/3x5G7.png

2

Re: C# і MySQL Connector, data truncated for column

Здається, зрозумів. В C# float це - 1,5. А в MySQL - 1.5.

Подякували: Replace, koala2

3

Re: C# і MySQL Connector, data truncated for column

Чи я правильно зрозумів, що ви кожного разу створюєте і видаляєте процедуру, яка не робить нічого, крім одного запиту оновлення даних?
Тоді відповідь на

Що я роблю не так?

дуже проста: ВСЕ. Робіть просто запит на оновлення.

Ну і що FLOAT(20) означає, на вашу думку? Я поки що в документації по MySQL такого не знайшов.

4

Re: C# і MySQL Connector, data truncated for column

koala написав:

Чи я правильно зрозумів, що ви кожного разу створюєте і видаляєте процедуру, яка не робить нічого, крім одного запиту оновлення даних?
Тоді відповідь на

Що я роблю не так?

дуже проста: ВСЕ. Робіть просто запит на оновлення.

Ну і що FLOAT(20) означає, на вашу думку? Я поки що в документації по MySQL такого не знайшов.

я шо дібіл створювать і видалять. Вона вже створена, я її просто викликаю. float(20) то, майбуть, значить, що макс. кількість символів може бути 20.

5

Re: C# і MySQL Connector, data truncated for column

TRYCUKI_V_KROVI написав:

я шо дібіл створювать і видалять.

Не знаю, але чомусь процедуру для одного запиту створили.

TRYCUKI_V_KROVI написав:

float(20) то, майбуть, значить, що макс. кількість символів може бути 20.

В документації чомусь всюди йдеться про форму FLOAT(M,N), де M - всього знаків, N - після коми.

6

Re: C# і MySQL Connector, data truncated for column

koala написав:
TRYCUKI_V_KROVI написав:

я шо дібіл створювать і видалять.

Не знаю, але чомусь процедуру для одного запиту створили.

TRYCUKI_V_KROVI написав:

float(20) то, майбуть, значить, що макс. кількість символів може бути 20.

В документації чомусь всюди йдеться про форму FLOAT(M,N), де M - всього знаків, N - після коми.

да то я просто показав повністю код процедури, шоб було зрозуміло, яка вона з себе, бо в phpmyadmin показувало тільки від begin до end. І яка в дупу різниця, який той флоат, я ж написав, що вже розібрався в чому проблема.

Подякували: koala1