我有一个存储用户信息的表,通过加载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的值:
我觉得奇怪的是它有一个已发布的文件但没有字节......
如果有人能告诉我我做错了什么,我会非常感激,如果我的英语不完美,也请原谅。
答案 0 :(得分:0)
问题是我在Page_Load一个PostBack中刷新页面以显示文件的名称,但同时它将PostedFile重置为空。
我的解决方案是创建一个全局HttpPostedFile变量,该变量将发布的文件存储在PostBack中以备将来使用。