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

C# 转换时对象引用未设置为对象的实例,c#,asp.net,exception-handling,C#,Asp.net,Exception Handling,我的代码是: Stream strm = ShowEmpImage(empno); 我正在使用VS2008、C#、ASP.NET3.5框架、SQLServer2005。 任何帮助都将不胜感激。问候 场景1: string conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString; 将此行用作: string conn = string.Empty; if(ConfigurationManager.Conn

我的代码是:

Stream strm = ShowEmpImage(empno);

我正在使用VS2008、C#、ASP.NET3.5框架、SQLServer2005。 任何帮助都将不胜感激。问候

场景1:

string conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;
将此行用作:

string conn = string.Empty;
if(ConfigurationManager.ConnectionStrings["dbcon"] != null)
{
    conn = ConfigurationManager.ConnectionStrings["dbcon"].ConnectionString;
}
如果未在app.config文件中设置dbcon键,则无法作为ConfigurationManager访问ConnectionString属性。ConnectionString[“dbcon”]将为空

情景2:

object img = cmd.ExecuteScalar();

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

如果数据库中不存在指定员工编号的行,则会发生这种情况

在将结果强制转换为字节数组之前,我们需要对此进行检查

试试这个:

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

好的,很多人都试图帮助你,但问题还没有确定。从中我可以看出问题是-field
Cust_Image
是varchar,您试图将其转换为二进制

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

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

哪一行引发此异常?Cust_图像字段的SQL Server数据类型是什么?是否在management studio上运行了查询?似乎没有结果。数据库中是否存在指定empno的行?@IANNELSOR…数据字段为varchar类型…@Azhar…我已检查了这两个字段…好的..我已在webconfig中设置了dbcon…img不是空的values@Ian.....i获取图像的值…但当它返回值时会产生问题。该你看起来怎么样?它是一个字节数组,或者其他什么?它是一个base64字符串(请参阅我的答案,以获得指向OP上一篇文章的链接),好吧,如果知道它会很好:-)@Reniuz。。Cust_图像字段为varchar类型…..不幸的是,我从今天开始负责这个项目。有人已经在前面完成了所有数据库设计和其他工作。因此,当我运行该项目时,我出现了此错误。如何纠正?@IanNelson是的,我今天早些时候读了另一个问题,发现meber的名字是一样的,这就是为什么我发布了关于另一个问题的帖子
return new MemoryStream(Convert.FromBase64String(img.ToString()));