关于Sybase镜像

发布于 2024-08-13 05:26:12 字数 662 浏览 5 评论 0原文

sybase中图像数据类型是否转换为字节数组? 我应用网络服务来获取 sybase 中的数据集(图像数据类型)。 我使用 byte[] 来获取 Web 服务的返回。 然后我使用“response.binarywrite(byte[])”来显示图像。(ASP.NET C#) 但是存在图像失真问题(当我放大图像时,会丢失一些点)。 我不知道为什么 有谁知道sybase中的图像数据类型可以转换为字节数组吗?

原始图片

扭曲图像

系统:

1 Sybase

    Sybase db: 11.9.2

    Adaptive server enterprise 12.5.1

    Sybase.Data.AseClient:1.0.152.0

2 ASP.NET C# (Visual Studio 2008)

3 IE6

Does image data type be converted to byte array in sybase?
I apply web service to get data set in sybase( image data type).
I use byte[] to get returning of web service.
Then i use the "response.binarywrite(byte[])" to show the image.(ASP.NET C#)
But there' s a image distortion problem (When i zoon in the image, some points are missed).
I don't know why
Does anyone know the image data type in sybase could be transfered to byte array?

Original Image

Distortion Image

System:

1 Sybase

    Sybase db: 11.9.2

    Adaptive server enterprise 12.5.1

    Sybase.Data.AseClient:1.0.152.0

2 ASP.NET C# (Visual Studio 2008)

3 IE6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘿看小鸭子会跑 2024-08-20 05:26:12

最后,我找到了答案。
这个问题的原因是Sybase中访问图像大小的限制。当图像大小大于37k字节时,输出仍然是37K。因此,我在这一步中错过了一些字节。解决办法是需要设置参数来检索所有数据。
部分代码如下:

    [WebMethod]
    public byte[] Image(string c, string r)
    {
       //check input ..
        ConnectionDatabase connbaseloc = new ConnectionDatabase();
        AseConnection conn1 = null;
        AseCommand cmd1 = null;
        string sqlstr1 = "";
        AseDataReader reader = null;
        byte[] Imagebytes = null;
        try
        {
            using (conn1 = connbaseloc.Odbcconn_xxx())
            {
                string setTextCmd = " SET TEXTSIZE 130000"; //set parameter
                cmd1 = new AseCommand(setTextCmd, conn1);
                cmd1.ExecuteNonQuery();
                sqlstr1 = "select ....";
                cmd1 = new AseCommand(sqlstr1, conn1);
                cmd1.CommandText = sqlstr1;
                reader = cmd1.ExecuteReader();
                while (reader.Read())
                {
                    Imagebytes = (byte[])reader["Image"];
                }
            }
        }
        catch (Exception e)
        {
            //do something
        }
        finally
        {
            if (conn1 != null) conn1.Close();
        }

        return Imagebytes;
    }

参数值取决于您的最大图像尺寸。

Finally, i find the anwser.
The reason of this problem is the limitation of accessing size of image in Sybase. When the size of image is higher than 37k byte, the output is still 37K. Therefore, i miss some byte in this step. The solution is that you need to set the parameter to retrieve all data.
The partial codes are showed as below:

    [WebMethod]
    public byte[] Image(string c, string r)
    {
       //check input ..
        ConnectionDatabase connbaseloc = new ConnectionDatabase();
        AseConnection conn1 = null;
        AseCommand cmd1 = null;
        string sqlstr1 = "";
        AseDataReader reader = null;
        byte[] Imagebytes = null;
        try
        {
            using (conn1 = connbaseloc.Odbcconn_xxx())
            {
                string setTextCmd = " SET TEXTSIZE 130000"; //set parameter
                cmd1 = new AseCommand(setTextCmd, conn1);
                cmd1.ExecuteNonQuery();
                sqlstr1 = "select ....";
                cmd1 = new AseCommand(sqlstr1, conn1);
                cmd1.CommandText = sqlstr1;
                reader = cmd1.ExecuteReader();
                while (reader.Read())
                {
                    Imagebytes = (byte[])reader["Image"];
                }
            }
        }
        catch (Exception e)
        {
            //do something
        }
        finally
        {
            if (conn1 != null) conn1.Close();
        }

        return Imagebytes;
    }

The parameter value depends on your max size of images.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文