Ссылка на объект не установлена ​​на экземпляр объекта при преобразовании - PullRequest
0 голосов
/ 12 декабря 2011

Мой код:

Stream strm = ShowEmpImage(empno);

public Stream ShowEmpImage(int empno)
    {

        string conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;
        SqlConnection connection = new SqlConnection(conn);
        string sql = "select Cust_Image from Cust_M_Tbl  where Cust_FID = '"+empno+"'";
        SqlCommand cmd = new SqlCommand(sql, connection);
        cmd.CommandType = CommandType.Text;
        connection.Open();
        object img = cmd.ExecuteScalar();
            try
            {

                return new MemoryStream((byte[])img);    ////Exception generated here

            }
            catch
            {
                return null;
            }
            finally
            {
                connection.Close();
            }

    }

Я использую VS2008, C #, ASP.NET 3.5 Framework, SQL Server 2005. Любая помощь будет оценена.С уважением.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Хорошо, многие пытаются вам помочь, но проблема не указана. Из предыдущего вашего вопроса Я могу сказать, что проблема в том, что поле Cust_Image является varchar, и вы пытаетесь преобразовать его в двоичный файл.

Итак, решение должно быть примерно таким:

return new MemoryStream(Convert.FromBase64String(img.ToString())); 
0 голосов
/ 12 декабря 2011

Это произойдет, если в базе данных нет строки для указанного номера сотрудника.

Нам нужно проверить это перед преобразованием результата в байтовый массив.

Попробуйте это:

public static string ConnectionString = 
    ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;

public Stream ShowEmployeeImage(int employeeNumber)
{
    using (var conn = new SqlConnection(ConnectionString))
    {
        const string query = 
            "select Cust_Image from Cust_M_Tbl where Cust_FID = '@empNo'";

        using (var command = new SqlCommand(query, conn))
        {
            command.Parameters.AddWithValue("@empNo", employeeNumber.ToString());
            conn.Open();

            var image = command.ExecuteScalar();

            return image == null ? null : new MemoryStream((byte[]) image);
        }
    }
}
0 голосов
/ 12 декабря 2011

Сценарий 1:

string conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;

используйте эту строку как:

string conn = string.Empty;
if(ConfigurationManager.ConnectionStrings["dbcon"] != null)
{
    conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;
}

если вы не установите ключ dbcon в своем файле app.config, вы не сможете получить доступ к свойству ConnectionString, так как ConfigurationManager.ConnectionStrings ["dbcon"] даст вам ноль.

Сценарий 2:

object img = cmd.ExecuteScalar();

Проверьте, является ли объект img нулевым, прежде чем использовать его в коде.

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