Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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
ASP.NET在SQL中存储映像并检索ASP:Image_Asp.net_Sql_Image - Fatal编程技术网

ASP.NET在SQL中存储映像并检索ASP:Image

ASP.NET在SQL中存储映像并检索ASP:Image,asp.net,sql,image,Asp.net,Sql,Image,我正在寻找文件上传图片jpeg,gif等到一个SQL数据库的updateprofilepicture页面。然后在profile页面上,我想从sql数据库中检索图像,并将其显示在Asp:image控件中。我有很多代码试图这样做,但它不起作用。该表包含一列Image类型。这里需要记住的重要一点是,您不应该尝试使用配置文件页面本身传输图像数据。相反,您希望您的配置文件页面为浏览器生成如下所示的HTML标记: <img src="~/MyImageHandler.ashx?UserID=1234"

我正在寻找文件上传图片jpeg,gif等到一个SQL数据库的updateprofilepicture页面。然后在profile页面上,我想从sql数据库中检索图像,并将其显示在Asp:image控件中。我有很多代码试图这样做,但它不起作用。该表包含一列Image类型。

这里需要记住的重要一点是,您不应该尝试使用配置文件页面本身传输图像数据。相反,您希望您的配置文件页面为浏览器生成如下所示的HTML标记:

<img src="~/MyImageHandler.ashx?UserID=1234" alt="User 1234 avatar" width="100px" height="150px" />


这是
控件的最终结果。然后浏览器将发送一个完全独立的Http请求来检索图像。网站上的图片就是这样工作的。然后,您需要能够处理该附加请求。为此,请创建一个
Http处理程序(*.ashx文件)
,并使用它从数据库中检索适当的图像数据并将其发送到浏览器。

正如Joel提到的,您应该使用一个HttpHandler或一个页面来显示图像。下面是输出图像的示例代码(image.ashx):

然后将页面中的图像用作:

  <asp:Image id="Image1" runat="server" ImageUrl="Image.ashx?ImageID=12"/>


如果您使用的是SQL 2005或更高版本,则不应使用数据类型映像,因为它现在是。相反,如果可能,您希望使用新的Varbinary(MAX)类型。一旦存储了它,您需要做的就是通过ADO.Net调用检索它,并将单元格值转换为Byte[]类型,然后调用Response.BinaryWrite,就像上面ScarletGarden的示例一样。

在几百GB的图像之后,我相信您会发现自己认为操作系统的文件系统和静态文件http服务器比数据库更适合存储图像,因为数据库很忙,有很多其他细节。它还允许您使用数千个现有的免费工具来处理、移动、托管图像等。

存储图像的路径和/或文件名,而不是将图像存储在数据库中。图像将填满数据库并使其变慢

试试这些链接,它可能会对你有所帮助

protected void Page_Load(object sender, EventArgs e) {
    GridView1.DataSourceID = "";
    GridView1.DataSource = SqlDataSource1;
    GridView1.DataBind();
}

protected void btnSubmit_Click(object sender, EventArgs e) {
    string strImageName = txtImageName.Text.ToString();

    if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "") {
        byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
        HttpPostedFile uploadedImage = FileUpload1.PostedFile;
        uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);

        // Create SQL Connection
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=RND3" + "\\" + "SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True";

        // Create SQL Command 
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "INSERT INTO Imagess(ImageName,Image)" + " VALUES (@ImageName,@Image)";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;

        SqlParameter ImageName = new SqlParameter("@ImageName", SqlDbType.VarChar, 50);
        ImageName.Value = strImageName.ToString();
        cmd.Parameters.Add(ImageName);

        SqlParameter UploadedImage = new SqlParameter("@Image", SqlDbType.Image, imageSize.Length);
        UploadedImage.Value = imageSize;
        cmd.Parameters.Add(UploadedImage);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

        Label1.Text = "File Uploaded";

        GridView1.DataSourceID = "";
        GridView1.DataSource = SqlDataSource1;
        GridView1.DataBind();
        con.Close();
    }
}
您还可以尝试将映像文件存储在服务器上,并将路径存储在Sql表上。。 通过这些链接


好的,您是否恰好有一个关于如何插入和存储图像的概要。我知道图像会被转换成二进制数组……我很确定我能想出如何插入图像。当要检索图像时,我不知道。*.ashx文件是如何工作的?这确实是一个不同的主题:答案将取决于此问题中未包含的许多内容,如数据库表的设置方式、表的主键是什么、安全性如何工作以及文件上载控件的设置。如果您真的想要,你可以将这些信息编辑到这个问题中,但如果你在每个问题中都有自己的问题,你可能会对你的问题有更多的关注。很好,我一定会尝试,然后回来。那么基本上创建一个像上面那样的“图像页面”,然后使用*.ashx页面来请求图像页面?很抱歉,我对asp相当陌生,我已经习惯了php。谢谢你的帮助。我想你有点落后了:你的*.ashx是图像页面。您的常规控件会导致对*.ashx页面的请求。另外:为了更好地处理糟糕的sql请求,我对SG的代码进行了一些清理,尽管这还很初级。非常感谢,今晚我将尝试一下!我很惊讶我收到回复的速度有多快。非常感谢!如何准确地使用处理程序页面。所有这些代码是否都存在于ProcessRequest(HttpContext)函数中?是的,首先我写了一篇文章来支持aspx页面。如果您更喜欢处理程序,那么应该将代码放入ProcessRequest中。
protected void Page_Load(object sender, EventArgs e) {
    GridView1.DataSourceID = "";
    GridView1.DataSource = SqlDataSource1;
    GridView1.DataBind();
}

protected void btnSubmit_Click(object sender, EventArgs e) {
    string strImageName = txtImageName.Text.ToString();

    if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "") {
        byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
        HttpPostedFile uploadedImage = FileUpload1.PostedFile;
        uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);

        // Create SQL Connection
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=RND3" + "\\" + "SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True";

        // Create SQL Command 
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "INSERT INTO Imagess(ImageName,Image)" + " VALUES (@ImageName,@Image)";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;

        SqlParameter ImageName = new SqlParameter("@ImageName", SqlDbType.VarChar, 50);
        ImageName.Value = strImageName.ToString();
        cmd.Parameters.Add(ImageName);

        SqlParameter UploadedImage = new SqlParameter("@Image", SqlDbType.Image, imageSize.Length);
        UploadedImage.Value = imageSize;
        cmd.Parameters.Add(UploadedImage);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

        Label1.Text = "File Uploaded";

        GridView1.DataSourceID = "";
        GridView1.DataSource = SqlDataSource1;
        GridView1.DataBind();
        con.Close();
    }
}