我正在尝试使用其属性和几个文本框将图像插入到数据库中。这是HTML代码:
<span class="label"><label for="FirstName">First Name: </label></span>
<asp:TextBox ID="FirstName" runat="server"></asp:TextBox>
</div>
<div class="row">
<span class="label"><label for="Surname">Surname: </label></span>
<asp:TextBox ID="Surname" runat="server"></asp:TextBox>
</div>
<div class="row">
<span class="label"><label for="PhotoUpload">Photo: </label></span>
<asp:FileUpload ID="PhotoUpload" runat="server" />
</div>
<div class="row">
<span class="label"> </span>
<asp:Button ID="Button1" runat="server" Text="Submit" onclick="Button1_Click" />
代码隐藏:
protected void Button1_Click(object sender, EventArgs e)
{
if (PhotoUpload.HasFile)
{
Stream photoStream = PhotoUpload.PostedFile.InputStream;
int photoLength = PhotoUpload.PostedFile.ContentLength;
string photoMime = PhotoUpload.PostedFile.ContentType;
string photoName = Path.GetFileName(PhotoUpload.PostedFile.FileName);
byte[] photoData = new byte[photoLength - 1];
photoStream.Read(photoData, 0, photoLength);
string CS = ConfigurationManager.ConnectionStrings["mm"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
con.Open();
SqlCommand cmd = new SqlCommand("spLogo", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FName", FirstName.Text);
cmd.Parameters.AddWithValue("@SName", Surname.Text);
cmd.Parameters.AddWithValue("@PData", photoData);
cmd.Parameters.AddWithValue("@PName", photoName);
cmd.Parameters.AddWithValue("@PLength", photoLength);
cmd.Parameters.AddWithValue("@PMime", photoMime);
cmd.ExecuteNonQuery();
}
}
这可能是什么问题?
这是我的存储过程:
alter procedure spLogo
@FName nvarchar(50),
@SName nvarchar(50),
@PData VarBinary(max),
@PName nvarchar(50),
@PLength int,
@PMime nvarchar(50)
as
begin
Insert into Employee2 values(@FName,@SName,@PData,@PName,@PLength,@PMime)
END
我第一次处理图像,所以我不确定哪种数据类型最好,但这是我能提出的最好的代码。
答案 0 :(得分:0)
这行可能是根本原因,因为您正在创建长度小于图像长度的byte
数组。
byte[] photoData = new byte[photoLength - 1];
让我们说说,photolength是1000,所以您正在创建999大小的字节数组(photoData),现在当下面的行尝试将第1000个字节复制到photoData时,它将失败。
photoStream.Read(photoData, 0, photoLength);
您应该创建与Image length相同的字节数组。希望它能起作用。
byte[] photoData = new byte[photoLength];