C# Mysql вставить BLOB-объект - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался вставить значение байта в Mysql. Но безуспешно. Он вставляет длину массива вместо атрибутов элемента. Тогда мне нужна помощь, как мне преобразовать его из BLOB-объекта в читаемый формат

string itemsQuery = "INSERT INTO `player_items` (`player_id`, `item_id`, `count`, `attributes`) VALUES ";
using (MemoryStream memoryStream = new MemoryStream())
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    binaryFormatter.Serialize(memoryStream, ItemAttributes);
    byte[] mStream = memoryStream.ToArray();
    string newQuery = string.Format("{0} ({1},{2},{3},{4});", itemsQuery, 1, 1, 1, mStream);
    ExecuteNonQuery(newQuery);
}

string nquery = "SELECT `attributes` FROM `player_items` WHERE " + 1;
using (MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(nquery))
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    binaryFormatter.Deserialize(memoryStream);
}

public int ExecuteNonQuery(string commandText)
{
    int affectedRows = 0;
    using (var connection = mySqlConnection)
    {
        using (var command = new MySqlCommand(commandText, connection))
        {
            affectedRows = command.ExecuteNonQuery();
        }
    }
    return affectedRows;
}

enter image description here

1 Ответ

1 голос
/ 09 апреля 2020

Я предлагаю использовать параметры вместо конкатенации строк и позволить движку выполнить сериализацию за вас:

string itemsQuery = "INSERT INTO `player_items` (`player_id`, `item_id`, `count`, `attributes`) VALUES (@player_id, @item_id, @count, @attributes)";
MySqlParameter[] parameters = {
    new MySqlParameter("player_id",1),
    new MySqlParameter("item_id",1),
    new MySqlParameter("count",1),
    new MySqlParameter("attributes",MySqlDbType.Blob)
    };
parameters[3].Value = ItemAttributes;
ExecuteNonQuery(itemsQuery, parameters);

public int ExecuteNonQuery(string commandText, params MySqlParameter[] parameters)
{
    int affectedRows = 0;
    using (var connection = mySqlConnection)
    {
        using (var command = new MySqlCommand(commandText, connection))
        {
            command.Parameters.AddRange(parameters);
            affectedRows = command.ExecuteNonQuery();
        }
    }
    return affectedRows;
}

Я также заметил, что вы, кажется, повторно используете mySqlConnection, что является плохой идеей , Соединения объединяются. NET, поэтому их создание относительно дешево. Лучше всего создать новый MySqlConnection в блоке using, а не повторно использовать существующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...