![](/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.