Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用存储过程从SQL Server 2012中以字符串形式检索Blob(VarBinary)数据?_C#_Sql Server_Asp.net Mvc_Entity Framework_Sql Server 2012 - Fatal编程技术网

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

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

我一直试图通过存储过程从数据库中获取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();
}

由于我的
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])