【问题标题】:Retrieving image from SQL Server to ASP.NET imagebutton [duplicate]将图像从 SQL Server 检索到 ASP.NET imagebutton [重复]
【发布时间】:2021-04-15 19:10:18
【问题描述】:

我正在尝试将 ASP.NET 中的数据插入 SQL Server 并将其从 SQL Server 检索回 ASP.NET。

插入部分已完成,但我在检索数据时遇到问题。我正在使用此代码,但抛出错误:

SqlConnection con = new SqlConnection(myconnstrng);
con.Open();

SqlCommand cmd = new SqlCommand("selection", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", parameter);

SqlDataAdapter da = new SqlDataAdapter(cmd);

DataSet dsa = new DataSet();
da.Fill(dsa);

if (dsa.Tables[0].Rows.Count > 0)
{
    MemoryStream ms = new MemoryStream((byte[])dsa.Tables[0].Rows[0]["Data"]);
    string strBase64 = Convert.ToBase64String(ms);
    ImageButton2.ImageUrl = "data:Image/png;base64," + strBase64;
}

我得到的错误是:

无法从“System.IO.MemoryStream”转换为“byte[]”

我是编程新手,如果有人可以帮助我解决这个问题。

谢谢大家!

【问题讨论】:

    标签: c# asp.net sql-server


    【解决方案1】:

    您卡在的特定线路,您根本不需要MemoryStream。您可以将DataTable 中的值直接传递给ToBase64String

    但您可以通过以下提示省去一些麻烦:

    1. 总是正确处理连接、命令和适配器/读取器,将它们放入using 块`

    2. 对于单个结果,您可以跳过表格和适配器,直接使用(byte[]) cmd.ExecuteScalar()

    3. 如果您需要处理多行(而不是仅在网格视图中显示),您可能会发现跳过DataTable 并通过以下方式获取数据更容易:

    using(var reader = cmd.ExecuteReader())
    {
        while(reader.Read())
            DoSomethingWithResult(reader.IsDBNull(0) ? null : reader.GetBytes(0));
    }
    

    一般DoSomethingWithResult不应该处理的很重,否则会阻塞SQL server。如果是,则存储在内存中,然后再进行处理。

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2016-12-06
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多