目标数组不够长。检查destIndex和length,以及数组的下限

时间:2014-06-29 01:21:06

标签: asp.net sql-server image

我正在尝试使用其属性和几个文本框将图像插入到数据库中。这是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">&nbsp;</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

我第一次处理图像,所以我不确定哪种数据类型最好,但这是我能提出的最好的代码。

1 个答案:

答案 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];