Datatable类型的对象

问题描述 投票:-1回答:1

我有一个包含3个列的sql数据库。 2个列是字符串,1个是jpeg。图像存储为VARBINARY(MAX)sql image

我已将此数据保存到asp.net中的数据表中。我想将图像作为字节数组,但显然是对象类型...。还是它?

enter image description here

1]什么是dt.rows [0] [2],对象或字节数组?

1b)如果不是字节数组,为什么.tostring返回“ System.Byte []”?

我的索引控制器

public IActionResult Index()
    {

        SqlConnection con = new SqlConnection("Data Source=DESKTOP-896D683;Initial Catalog=aspdb1;Integrated Security=True");

        SqlDataAdapter sda = new SqlDataAdapter(" select * from stuff_for_carrousel ", con);

        List<front_page> mi_list = new List<front_page>();
        DataTable dt = new DataTable();
        sda.Fill(dt);
        Image newImage = mi_converter.convert_to_image(dt.Rows[0][2]);
        ViewData["dd"] = dt.Rows[0][0].ToString();
        ViewData["ccc"] = dt.Rows[0][1].ToString();
        ViewData["ts"] = dt.Rows[0][2].GetType().ToString();

        return View();
    }

我的转换器

    public class mi_converter
    {
        public Image convert_to_image(byte[] b)
        {
            using (var ms = new MemoryStream(b))
            {
                return Image.FromStream(ms);
            }
        }

    }
}

我想我只需要将dt.rows [0] [2]转换为字节数组。

asp.net arrays sql-server jpeg
1个回答
0
投票

dt.Rows[0][0]的意思是:向我获取第一行第一列的值。由于该值基本上可以是任何值,因此.Net框架只能将其表示为System.Object

但是,您的方法需要byte[]-因此,您需要将该对象转换为字节数组,或者更好的是,使用Field<T>扩展方法代替索引器:

Field<T>

以及一些注意事项:

  1. 使用Image newImage = mi_converter.convert_to_image(dt.Rows[0].Field<Byte[]>(2)); 是一个坏主意-它使您的代码容易受到表中更改的影响。

  2. 使用顺序索引器(0,1,2)甚至更糟,因为现在您的代码更容易受到表中更改的影响。

  3. 在代码中使用标识符,例如select *"dd"或任何其他无意义的字母组合,这是一个糟糕的主意-总是使用有意义的名称。您未来的自我会感谢您。

© www.soinside.com 2019 - 2024. All rights reserved.