转换时,对象引用未设置为对象的实例

时间:2011-12-12 12:04:53

标签: c# asp.net exception-handling

我的代码是:

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 个答案:

答案 0 :(得分:1)

好的很多人试图帮助你,但问题没有具体说明。从previous your question我可以看出问题是 - 字段Cust_Image是varchar并且您尝试将其转换为二进制。

所以解决方案应该是这样的:

return new MemoryStream(Convert.FromBase64String(img.ToString())); 

答案 1 :(得分:0)

情景1:

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

将此行用作:

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

如果未在app.config文件中设置dbcon密钥,则无法访问ConnectionString属性,因为ConfigurationManager.ConnectionStrings [“dbcon”]将为空。

情景2:

object img = cmd.ExecuteScalar();

在代码中使用img对象之前检查它是否为null。

答案 2 :(得分:0)

如果数据库中没有指定员工编号的行,则会发生这种情况。

我们需要在将结果转换为字节数组之前检查这一点。

试试这个:

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);
        }
    }
}