簡體   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