更新数据库图像只存储0x

时间:2015-01-02 07:12:43

标签: c# asp.net xml image sql-update

我有一个存储用户信息的表,通过加载XML文件来填充。 在该表中,我有一个Image类型列,适用于XML文件中设置为“null”的所有用户。 当我尝试更新该列并设置图像时出现问题,它只存储“0x”。

这是表格:

create table User(
ID INTEGER PRIMARY KEY,
name VARCHAR(50),
foto IMAGE,
email VARCHAR(100))

这是我的更新代码:

protected void addFoto_Click(object sender, EventArgs e)
{
    Byte[] imgByte = null;
    if (file_upload.PostedFile != null)
    {
        HttpPostedFile File = file_upload.PostedFile;
        File.InputStream.Position = 0;
        imgByte = new Byte[File.ContentLength];
        File.InputStream.Read(imgByte, 0, File.ContentLength);
    }
    string sql = "update User set foto = @foto where email= @email";
    using(SqlCommand cmd = new SqlCommand(sql, con.getConexion()))
    {
        cmd.Parameters.AddWithValue("@email", Txtemail.Text.ToString());
        cmd.Parameters.AddWithValue("@foto", imgByte);
        con.open();
        cmd.ExecuteNonQuery();
        con.close();
    }
}

我尝试添加

File.InputStream.Position = 0;

作为这篇文章的答案,但仍然没有奏效。

Can't save byte[] array data to database in C#. It's saving 0x

我还尝试使用以下代码的列类型VARBINARY(MAX):

string sql = "update User set foto = @foto where email= @email";
using (SqlCommand cmd = new SqlCommand(sql, con.getConexion()))
{
   Stream fs = file_upload.PostedFile.InputStream;
   BinaryReader br = new BinaryReader(fs);
   Byte[] bytes = br.ReadBytes((Int32)fs.Length);
   cmd.Parameters.AddWithValue("@email", Txtemail.Text.ToString());
   cmd.Parameters.Add("@foto", SqlDbType.Binary).Value = bytes;
   con.open();
   cmd.ExecuteNonQuery();
   con.close();
}

其中只存储了0x000000 ......最后,我还尝试直接添加图像:

System.Drawing.Image imag = System.Drawing.Image.FromStream(file_upload.PostedFile.InputStream);
cmd.Parameters.Add("foto", SqlDbType.Binary, 0).Value = ConvertImageToByteArray(imag, System.Drawing.Imaging.ImageFormat.Jpeg);

没有结果。

以下是调试时file_upload的值:

Debug console of the file_upload

我觉得奇怪的是它有一个已发布的文件但没有字节......

如果有人能告诉我我做错了什么,我会非常感激,如果我的英语不完美,也请原谅。

1 个答案:

答案 0 :(得分:0)

问题是我在Page_Load一个PostBack中刷新页面以显示文件的名称,但同时它将PostedFile重置为空。

我的解决方案是创建一个全局HttpPostedFile变量,该变量将发布的文件存储在PostBack中以备将来使用。