AMK16 Ответов: 2

Как получить двоичные данные из базы данных


У меня есть список шестнадцатеричных чисел с типом данных varbinary Но когда я запускаю запрос, в результате ничего не отображается.

Что я уже пробовал:

Currently, I'm getting an error:
System.InvalidOperationException: 'Invalid attempt to read when no data is present.'

Can I know what is the best way to fetch the binary data from the database?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Сообщение об ошибке ясно говорит вам, что ваш dataReader не содержит никаких записей. Это говорит о том, что предыдущий запрос не нашел ни одной совпадающей строки. Вы должны проверить значение, которое вы используете в качестве критерия поиска в вашем предложении SELECT. Но вам также нужно добавить проверки во весь код вашей базы данных, чтобы увидеть, были ли запросы успешными или нет. В нынешнем виде ваш код может работать неделями, ничего не делая правильно, и вы никогда не узнаете об этом.

Также обратите внимание на комментарий выше от Ричарда Димимга, который очень важен.


Рейтинг:
1

Richard Deeming

Используйте параметры для исправления SQL-инъекция[^] уязвимости в вашем коде.

Оберните все одноразовые предметы в using блоки.

Не разделяйте объекты connection, command, dataadapter или datareader между вызовами вашего метода.

Нет необходимости использовать dataadapter для выполнения одной команды обновления.

string SNE = data["End_Rg"];

using (var command = new SqlCommand("UPDATE Range SET status = 'Used' WHERE End_SerialNum = @SNE", cnn))
{
    command.Parameters.AddWithValue("@SNE", SNE);
    command.ExecuteNonQuery();
}

using (var command = new SqlCommand("SELECT Start_Range, End_Range, Status FROM SDCard_SNRange WHERE End_SerialNum = @SNE", cnn))
{
    command.Parameters.AddWithValue("@SNE", SNE.Substring(2));
    
    using (var reader = command.ExecuteReader())
    {
        if (reader.HasRows)
        {
            using (var tw = File.AppendText(logPath))
            {
                while (reader.Read())
                {
                    tw.WriteLine("Update status");
                    tw.WriteLine("Start Range: {0}", dataReader["Start_Range"]);
                    tw.WriteLine("End Range: {0}", dataReader["End_Range"]);
                    tw.WriteLine("Status: {0}", dataReader["Status"]);
                }
            }
        }
    }
}