我的代码是:
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。 任何帮助将不胜感激。问候。
答案 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);
}
}
}