繁体   English   中英

如何使用存储过程从 SQL Server 2012 以字符串形式检索 Blob(VarBinary)数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM