C# 如何使用存储过程从SQL Server 2012中以字符串形式检索Blob(VarBinary)数据?
我一直试图通过存储过程从数据库中获取blob数据我能够获取数据,但问题是数据是针对ASP.NET MVC应用程序的,在该应用程序中,它使用C# 如何使用存储过程从SQL Server 2012中以字符串形式检索Blob(VarBinary)数据?,c#,sql-server,asp.net-mvc,entity-framework,sql-server-2012,C#,Sql Server,Asp.net Mvc,Entity Framework,Sql Server 2012,我一直试图通过存储过程从数据库中获取blob数据我能够获取数据,但问题是数据是针对ASP.NET MVC应用程序的,在该应用程序中,它使用ConvertToList进行转换: public static List<T> ConvertToList<T>(this DataTable dt) { var columnNames = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToL
ConvertToList
进行转换:
public static List<T> ConvertToList<T>(this DataTable dt)
{
var columnNames = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList();
var properties = typeof(T).GetProperties();
return dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name))
{
if (pro.PropertyType == Type.GetType("System.Int32"))
pro.SetValue(objT, row[pro.Name].ToString().ToInt32(), null);
else if (pro.PropertyType == Type.GetType("System.Double"))
pro.SetValue(objT, row[pro.Name].ToString().ToDouble(), null);
else if (pro.PropertyType == Type.GetType("System.String"))
pro.SetValue(objT, row[pro.Name].ToString(), null);
else if (pro.PropertyType == Type.GetType("System.Int64"))
pro.SetValue(objT, row[pro.Name].ToString().ToInt32(), null);
else if (pro.PropertyType == Type.GetType("System.Boolean"))
pro.SetValue(objT, Convert.ToBoolean(row[pro.Name].ToString()), null);
//else if (pro.PropertyType == Type.GetType("System.Byte[]"))
// pro.SetValue(objT, Convert.ToByte(row[pro.Name]), null);
}
}
return objT;
}).ToList();
}
及
由于我的return
类型是var
,因此无法执行此操作,因此我尝试使用存储过程进行转换,而它是这样选择的
CONVERT(VARCHAR(MAX), LME.CoverPageImage, 2)
但是在调用ConvertToList
之后,它仍然返回空值
有没有办法通过存储过程将其作为字符串从数据库中获取,或者使用C#ASP.NET MVC进行转换
由于我的返回类型是var,因此无法执行此操作
否。var
不是类型
跑
查看DataTable列的运行时类型。我想你会发现它已经是字节[]
,如果不是,你可以转换它
及
绝对不是你想要的。它将值转换为单个
字节
而不是字节[]
是否检查了表中的值?可能它在数据库中为空。@Alex不,我已经检查了它的Id,我正在调用它。它在该列中确实有值。我看不出有问题。请尝试调试,告诉我们非空值在什么阶段变为空。问题是如果数据类型为系统,我的ConvertToList
函数会以某种方式将值设置为空。Byte因此,下面是我如何使用此方法链接克服这种情况的:以字符串形式检索数据,然后使用javascript函数动态设置image src属性
string s3 = Convert.ToBase64String(bytes);
CONVERT(VARCHAR(MAX), LME.CoverPageImage, 2)
var data = row[pro.Name];
var typeName = data.GetType().Name;
Convert.ToByte(row[pro.Name])