简体   繁体   English

如何将图像存储到数据库C#中/如何将Byte []转换为varbinary(max)C#

[英]How to store image to database C# / how to convert Byte[] to varbinary(max) C#

I'm trying to insert data into a database, but cannot insert the variable Byte[] bytes . 我正在尝试将数据插入数据库,但是无法插入变量Byte[] bytes When I change the data type in the database to image, I can insert, but when I change it to varbinary(max) this error shows up: 当我将数据库中的数据类型更改为image时,可以插入,但是当我将其更改为varbinary(max)时,将显示以下错误:

An object or column name is missing or empty. 对象或列名称丢失或为空。 For SELECT INTO statements, verify each column has a name. 对于SELECT INTO语句,请验证每个列都有一个名称。 For other statements, look for empty alias names. 对于其他语句,请查找空别名。 Aliases defined as "" or [] are not allowed. 不允许将别名定义为“”或[]。 Change the alias to a valid name. 将别名更改为有效名称。 Incorrect syntax near ''. ”附近的语法不正确。

How can I fix this problem? 我该如何解决这个问题?

protected void btnUpload_Click(object sender, EventArgs e)
    {
        HttpPostedFile postedFile = FileUpload1.PostedFile;
        string filename = Path.GetFileName(postedFile.FileName);
        string fileExtension = Path.GetExtension(filename);
        int fileSize = postedFile.ContentLength;
        int FkAlbum = Int32.Parse(ddlSubjects.SelectedValue);
        String PicDetail = DropDownList1.SelectedValue;

        String Artists = System.Configuration.ConfigurationManager.ConnectionStrings["FleetManagementConnectionString"].ConnectionString;
        System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(Artists);

        //An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.
        //Incorrect syntax near ''.An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.
        //Incorrect syntax near ''.

        if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".gif"
            || fileExtension.ToLower() == ".png" || fileExtension.ToLower() == ".bmp")
        {
            Stream stream = postedFile.InputStream;
            BinaryReader binaryReader = new BinaryReader(stream);
            Byte[] bytes = binaryReader.ReadBytes((int)stream.Length);


            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Insert into Images (ImageName,ImageData,PicDetail,ImageSize,AlbumID) values('" + filename + "','" + bytes + "','" + PicDetail + "'," + fileSize + "," + FkAlbum + ")", con);
            //System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Insert into Images (ImageName,PicDetail,ImageSize,AlbumID) values('" + filename + "','" + PicDetail + "'," + fileSize + "," + FkAlbum + ")", con);


            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            lblMessage.Visible = true;
            lblMessage.Text = "ThaNK YOU";



        }
        else
        {
            lblMessage.Visible = true;
            lblMessage.ForeColor = System.Drawing.Color.Red;
            lblMessage.Text = "Only images (.jpg, .png, .gif and .bmp) can be uploaded";
            hyperlink.Visible = false;
        }
    }
}

Use SqlCommand parameters to avoid SQL injection. 使用SqlCommand参数可以避免SQL注入。 Don't build a SQL statement string by inserting values. 不要通过插入值来构建SQL语句字符串。 This may actually resolve your problem as well. 这实际上也可以解决您的问题。

SqlCommand command = new SqlCommand(@"INSERT INTO Images (ImageName, ImageData, PicDetail, ImageSize, AlbumID)
    VALUES (@ImageName, @ImageData, @PicDetail, @ImageSize, @AlbumId)", con);

command.Parameters.AddWithValue("@ImageName", filename);
command.Parameters.AddWithValue("@ImageData", bytes);
command.Parameters.AddWithValue("@PicDetail", PicDetail);
command.Parameters.AddWithValue("@ImageSize", fileSize);
command.Parameters.AddWithValue("@AlbumId", FkAlbum);

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx https://msdn.microsoft.com/zh-CN/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将C#中的byte []作为字符串传递到SQL Server存储过程并转换为varbinary(MAX) - How to pass byte[] from C# as string to SQL Server stored procedure and convert into varbinary(MAX) SQL Server VARBINARY(max) 到 c# byte[] - SQL Server VARBINARY(max) to c# byte[] C#:如何使用 varbinary(Max) 将图像上传到 SQL 服务器数据库 - C# : how to upload image to a SQL Server database using varbinary(Max) C#调整jpg图像,转换为字节并使用varbinary保存到数据库中 - C# Resize jpg image, convert to byte and save into database using varbinary 在C#中从数据库检索时如何将varBinary转换为图像或视频 - How to convert varBinary into image or video when retrieved from database in C# 如何使用c#将字符串存储在varbinary(max)列中 - How can I store a string in a varbinary(max) column using c# 从SQL Server中检索varbinary(MAX)到C#中的byte [] - Retrieve varbinary(MAX) from SQL Server to byte[] in C# 如何使用C#和MVC3在MSSQL数据库中搜索byte [] / varbinary - How to search a MSSQL database for byte[]/varbinary using C# and MVC3 如何在c#WPF中将Varbinary(MAX)转换为视频或音频格式 - How to convert from Varbinary(MAX) into Video or Audio format in c# WPF 无法将SQL VARBINARY正确转换为byte []并在ASP.NET c#中转换为Image - Can't convert SQL VARBINARY to byte[] correctly and convert to Image in ASP.NET c#
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM