У меня есть сетка с именем gvALL_ACCESS, и я пытаюсь реализовать элемент управления загрузкой для каждой строки, однако я не могу этого понять!У меня есть столбец с именем COLFile в моей базе данных, который является типом данных varbinary (max).Моя цель - чтобы пользователь мог загрузить файл с помощью элемента управления FileUpload, а затем эти данные загружаются в столбец COLFile для созданной мной строки.Позвольте мне дать еще немного кода для контекста:
ASPX
<asp:GridView ID="gvALL_ACCESS" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDs_ALL_ACCESS"
DataKeyNames="RECNUM" OnRowCommand="gvALL_ACCESS_RowCommand" AllowSorting="True">
<AlternatingRowStyle BackColor="LightGray" HorizontalAlign="Left" />
<EditRowStyle HorizontalAlign="Left" />
<RowStyle HorizontalAlign="Left" />
<Columns>
<asp:BoundField ControlStyle-Width="150" DataField="NAME" HeaderText="USERID" SortExpression="NAME" />
<asp:TemplateField HeaderText="COL FILE">
<ItemTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button runat="server" ID="UploadButton" Text="Upload" onclick="UploadButton_Click"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Итак, вы можете видеть, моя основная идея для этого состоит в том, чтобы пользователь выбрал файла затем нажмите кнопку загрузки.Код может выглядеть примерно так:
Псевдокод VB
Protected Sub gvALL_ACCESS_RowCommand(sender As Object, e As GridViewCommandEventArgs)
Dim filename As String '= get the filename somehow'
Dim contentType As String '= FileUpload1.PostedFile.ContentType get the contenttype somehow
DIM ID = 'somehow get ID of row
Using fs As Stream = FileUpload1.PostedFile.InputStream
Using br As New BinaryReader(fs)
Dim bytes As Byte() = br.ReadBytes(DirectCast(fs.Length, Long))
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As New SqlConnection(constr)
Dim query As String = "update tblFiles set COLFile = @Data WHERE ID = @ID"
Using cmd As New SqlCommand(query)
cmd.Connection = con
cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
End Using
End Using
End Sub
Теперь я посмотрел на некоторые ресурсы, чтобы сделать это, но мне всегда кажется, чтоотсутствует только один важный элемент!Самый близкий ресурс, который я видел, был этот:
https://www.aspsnippets.com/Articles/Read-and-Write-BLOB-Data-to-SQL-Server-database-using-C-and-VBNet.aspx
Это почти делает то, что я хочу (и именно там я взял код VB), нопроблема в том, что он вставляет строки в таблицу, а не обновляет определенную строку в таблице.По сути, элемент управления не находится внутри gridview.
Я также видел эту ссылку,
Кнопка загрузки файла для каждой строки внутри gridview и кнопка для загрузки в asp.net
но проблема здесь в том, что код на C #, файл загружается на сервер (не в базу данных), и не похоже, что весь код, который мне нужен, есть.
К сожалению, все другие ресурсы, которые я видел, похоже, используют файловый сервер, а не базу данных, имеют код в C # или не предоставляют элемент управления ВНЕ сетки:
Я долженОбратите внимание: я даже не уверен, что использую правильную функцию в своем коде VB.Является ли это даже подходящим сабвуфером, который я хочу использовать?
Protected Sub gvALL_ACCESS_RowCommand(sender As Object, e As GridViewCommandEventArgs)
В любом случае, я был бы очень признателен за то, как я могу решить мою проблему!Спасибо за любую помощь!