![](/img/trans.png)
[英]How to pass byte[] from C# as string to SQL Server stored procedure and convert into varbinary(MAX)
[英]How to retrieve Blob (VarBinary) data as string from SQL Server 2012 using a stored procedure?
我一直在尝试通过存储过程从数据库中获取 blob 数据我能够获取数据,但问题是数据用于 ASP.NET MVC 应用程序,它使用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();
}
获取System.Byte[]
数据时,始终设置为 null; 我尝试使用通常的字节到字符串转换将其转换,例如
string result = System.Text.Encoding.UTF8.GetString(byteArray);
和
string s3 = Convert.ToBase64String(bytes);
这无法完成,因为我的return
类型是var
,所以我尝试使用存储过程进行转换,同时它像这样选择
CONVERT(VARCHAR(MAX), LME.CoverPageImage, 2)
但在调用ConvertToList
后它仍然返回 null 值!
有什么方法可以通过存储过程将其作为字符串从数据库中获取,或者使用 C# ASP.NET MVC 进行转换?
这无法完成,因为我的返回类型是 var
不。 var
不在类型中。
跑
var data = row[pro.Name];
var typeName = data.GetType().Name;
查看 DataTable 列的运行时类型。 我想你会发现它已经是byte[]
,如果不是你可以转换它。
和
Convert.ToByte(row[pro.Name])
绝对不是你想要的。 它将值转换为单个byte
而不是byte[]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.