Параметризованный запрос, который возвращает столбцы TEXT, всегда возвращает ноль для столбцов INT - PullRequest
1 голос
/ 19 октября 2019

Проблема с C # mySQL ODBC Моя таблица

CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fbid` varchar(30) NOT NULL,
`fbname` varchar(80) NOT NULL,
`datecreate` datetime NOT NULL,
`ipcreate` varchar(20) NOT NULL,
`datelogin` datetime NOT NULL,
`iplogin` varchar(20) NOT NULL,
`xstatus` int(2) NOT NULL,
`xverstion` int(5) NOT NULL,
`xdata` text NOT NULL,
`xitem` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

Моя процедура:

CREATE PROCEDURE `VVVVV_getUserByFbId`(fbid2 varchar(30))
BEGIN
SELECT * from vvvvv_account where vvvvv_account.fbid=fbid2 LIMIT 1;
END

fbid2 - это параметр (= 408301576730032) в коде C #

OdbcConnection connection = new OdbcConnection(constr);
            OdbcCommand cmd;           
            DataTable dt = new DataTable();
            try
            {

                OpenConnection(connection);

                cmd = new OdbcCommand("{call VVVVV_getUserByFbId(?)}", connection);
cmd.Parameters.AddWithValue("@fbid2", "408301576730032");
                cmd.CommandType = CommandType.StoredProcedure;

                OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                da.Fill(dt);
                da.Dispose();
            }
            catch (Exception ex)
            {

            }
            finally
            {
                CloseConnection(connection);
            }
            return dt;

вывод в C # dt.Rows[0]["id"] всегда = 0 Не в порядке dt.Rows[0]["fbname"] = "ABC" OK

означает, что я все еще могу получать данные из базы данных в обычном режиме. Но int column всегда = 0, varchar, дата и время в порядке;

Но если я изменю процедуру на:

BEGIN
    select * from account where account.fbid='408301576730032' LIMIT 1;
END

В C # "{call VVVVV_getUserByFbId()}" -> id field = 3903

Если нет параметра (fbid2) илинет текста fied (xdata, xitem) -> id, xstatus (int fields) возвращает нормальное значение. Но если параметр передан или выберите xdata -> id (int fields) всегда = 0;

введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Вы столкнулись с подтвержденной ошибкой в ​​MySQL Connector / ODBC, о которой сообщалось здесь:

https://bugs.mysql.com/bug.php?id=97191

Поскольку вы используете C #, вы можете посмотреть, работает ли MySQL Connector / NET лучшедля вашего приложения.

1 голос
/ 19 октября 2019

Пожалуйста, попробуйте преобразовать возвращаемое значение в int следующим образом.

int x = System.Convert.ToInt32(dt.Rows[0]["id"]);

Возможно, проблема в том, что MySql int не сопоставляется с C # int.

...