Virendra S from Bangalore, Karnataka Ответов: 1

Извлечение изображения из SQL db


Я пытаюсь получить изображение из MS SQL DB. GetEmpImg() вызывается в другом классе, я хочу вернуть байты данных. но код возврата недоступен мой фрагмент кода:

public static byte[] GetEmpImg(int emp_no)
        {
            byte[] empImgBytes;
            AdoHelper.ConnectionString = ConfigurationManager.ConnectionStrings["imageconst"].ConnectionString;
            string query = "select EmpPhoto from EmpPhoto where EmpNo=@empno";

            using (AdoHelper adoHelper = new AdoHelper())
            using (SqlDataReader dataReader = adoHelper.ExecDataReader(query, "@empno", emp_no))
            {
                if (dataReader.FieldCount > 0)
                {
                    while (dataReader.Read())
                    {
                        empImgBytes = (byte[])dataReader["EmpPhoto"];
                        return empImgBytes; ///here im getting the data but ImgBytes not reachable outside of this scope
                    }
                }
                dataReader.Close();
                return imagebytesdata;////here i want return the image bytes
            }
            
        }


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

Я получаю данные из SqlDataReader, а затем присваиваю им переменную. но не смог вернуть код.

1 Ответов

Рейтинг:
11

OriginalGriff

Вы не можете вернуть туда байтовые данные: они не существуют, потому что вы их не читали.

Вы читаете любые данные только тогда, когда есть хотя бы одна доступная строка - а там должна быть только одна строка, так что while цикл является избыточным, просто используйте if вместо этого - и когда вы извлекли его, вы немедленно возвращаете его вызывающему абоненту. Итак, какие данные вы ожидаете получить, если в результате запроса нет строк?

То, что вы просите, - это "если такого сотрудника нет, верните его фотографию". А это явная чушь!

Вместо этого либо верните пустой массив, либо верните nullи пусть вызывающий метод выяснит, что он хочет сделать с проблемой!

public static byte[] GetEmpImg(int emp_no)
    {
    byte[] empImgBytes = null;
    AdoHelper.ConnectionString = ConfigurationManager.ConnectionStrings["imageconst"].ConnectionString;
    string query = "SELECT EmpPhoto FROM EmpPhoto WHERE EmpNo=@EMPNO";

    using (AdoHelper adoHelper = new AdoHelper())
        {
        using (SqlDataReader dataReader = adoHelper.ExecDataReader(query, "@EMPNO", emp_no))
            {
            if (dataReader.Read())
                {
                empImgBytes = (byte[])dataReader["EmpPhoto"];
                }
            }
        }
    return empImgBytes;
    }