ASP.NET 2.0 - 如何于网页上新增包括图片在内的数据至数据库
2006-12-31 14:42
645 查看
我们通常会在数据库数据表内储存文数字之类的数据,不过在某些时候,我们也会直接将照片等二进制影像数据储存在字段中。有使用许多朋友询问,在网页上新增数据记录时,如何让用户能够一并选取图片并写入varbinary(max) 类型的字段中,我们撰写了一个网页范例来示范如何实作。以下是这一个网页范例的操作流程:
1. 请如图表 1 所示,按下「先于数据库中建立所需的数据表」按钮,此举会在「北风贸易」数据库中建立一个名称为「练习作者」的数据表,以便用来储存包括照片在内的数据记录。
基本上,此按钮的Click事件处理例程会在SQL Server Express上执行以下的陈述式来建立「练习作者」数据表:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[练习作者]') AND type in (N'U'))
DROP TABLE [dbo].[练习作者];
CREATE TABLE [dbo].[练习作者] (
作者编号 int IDENTITY(1,1) NOT NULL,
作者姓名 nvarchar(10) NULL ,
作者电话 nvarchar(20) NULL ,
作者玉照 varbinary(max) NULL)
图表 1
2. 请如图表 2 所示,按下「浏览」按钮来选取照片。
图表 2
3. 请如图表 3 所示,于「选择文件」对话框中选取所需的照片并按下「开启」按钮。
图表 3
4. 请如图表 4 所示,按下「储存」按钮。
图表 4
5. 反复上述步骤的操作,直到您已新增完毕所需的各笔数据记录之后,请如图表 5 所示,按一下超级链接「检视数据表的照片数据」以便检视我们所所上传并写入至数据库字段的数据。
图表 5
了解了网页范例的操作方式之后,我们要来检视其开发技巧。我想,本范例最关键的技巧,就是如何将 FileUpload 控件上传至Web服务器之照片文件的字节数组,并将其带入 INSERT 陈述式的参数中。此项作业的程序代码撰写于「上传并写入数据库」按钮的 Click 事件处理例程中,兹列示如下:
Protected Sub btnUpload_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnUpload.Click
If Not Me.FileUpload1.HasFile Then
Me.lblMessage.Text = "您必须所选一张照片。"
Return
End If
' 利用 SqlConnectionStringBuilder 对象来构建连接字符串。
Dim connectStringBuilder As New SqlConnectionStringBuilder()
connectStringBuilder.DataSource = "(local)\SQLExpress"
connectStringBuilder.InitialCatalog = "北风贸易"
connectStringBuilder.IntegratedSecurity = True
Try
' 建立连接。
Using con As New SqlConnection(connectStringBuilder.ConnectionString)
Dim fileLen As Integer ' 取得上传之照片档的长度。
fileLen = FileUpload1.PostedFile.ContentLength ' 建立一个字节数组来持有文件的内容。 Dim Input(fileLen) As Byte Input = FileUpload1.FileBytes
Dim updateCMD As SqlCommand = New SqlCommand( _
"INSERT INTO 练习作者 (作者姓名, 作者电话, 作者玉照) " & _
"VALUES (@AuthorName, @TelePhone, @Photo)", con)
Dim AuthorNameParameter As SqlParameter = _
New SqlParameter("@AuthorName", SqlDbType.NVarChar, 10)
If Me.txtAuthorName.Text.Trim().Equals("") Then
AuthorNameParameter.Value = "章立民研究室"
Else
AuthorNameParameter.Value = Me.txtAuthorName.Text.Trim()
End If
updateCMD.Parameters.Add(AuthorNameParameter)
Dim TelephoneParameter As SqlParameter = _
New SqlParameter("@TelePhone", SqlDbType.NVarChar, 20)
If Me.txtAuthorName.Text.Trim().Equals("") Then
TelephoneParameter.Value = "(02)123456789"
Else
TelephoneParameter.Value = Me.txtTelephone.Text.Trim()
End If
updateCMD.Parameters.Add(TelephoneParameter)
Dim PhotoParameter As SqlParameter = _ New SqlParameter("@Photo", SqlDbType.Image) PhotoParameter.Value = Input updateCMD.Parameters.Add(PhotoParameter)
con.Open()
updateCMD.ExecuteNonQuery()
con.Close()
Me.lblMessage.Text = "成功新增数据记录"
End Using
Catch ex As Exception
Me.lblMessage.Text = "发生错误" & vbCrLf & ex.ToString
Throw New Exception(ex.Message)
End Try
End Sub
我们在「Visual Basic 2005 文件 IO 与数据存取秘诀」与「Visual C# 2005 文件 IO 与资料存取秘诀」这两本书的第七章对于“大型对象(LOB) 的存取秘诀”有深入的探讨,请自行参考之。
另外,我们会找个时间来谈谈ASP.NET AJAX之 UpdatePanel 控件与FileUpload 控件的兼容性问题。
1. 请如图表 1 所示,按下「先于数据库中建立所需的数据表」按钮,此举会在「北风贸易」数据库中建立一个名称为「练习作者」的数据表,以便用来储存包括照片在内的数据记录。
基本上,此按钮的Click事件处理例程会在SQL Server Express上执行以下的陈述式来建立「练习作者」数据表:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[练习作者]') AND type in (N'U'))
DROP TABLE [dbo].[练习作者];
CREATE TABLE [dbo].[练习作者] (
作者编号 int IDENTITY(1,1) NOT NULL,
作者姓名 nvarchar(10) NULL ,
作者电话 nvarchar(20) NULL ,
作者玉照 varbinary(max) NULL)
图表 1
2. 请如图表 2 所示,按下「浏览」按钮来选取照片。
图表 2
3. 请如图表 3 所示,于「选择文件」对话框中选取所需的照片并按下「开启」按钮。
图表 3
4. 请如图表 4 所示,按下「储存」按钮。
图表 4
5. 反复上述步骤的操作,直到您已新增完毕所需的各笔数据记录之后,请如图表 5 所示,按一下超级链接「检视数据表的照片数据」以便检视我们所所上传并写入至数据库字段的数据。
图表 5
了解了网页范例的操作方式之后,我们要来检视其开发技巧。我想,本范例最关键的技巧,就是如何将 FileUpload 控件上传至Web服务器之照片文件的字节数组,并将其带入 INSERT 陈述式的参数中。此项作业的程序代码撰写于「上传并写入数据库」按钮的 Click 事件处理例程中,兹列示如下:
Protected Sub btnUpload_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnUpload.Click
If Not Me.FileUpload1.HasFile Then
Me.lblMessage.Text = "您必须所选一张照片。"
Return
End If
' 利用 SqlConnectionStringBuilder 对象来构建连接字符串。
Dim connectStringBuilder As New SqlConnectionStringBuilder()
connectStringBuilder.DataSource = "(local)\SQLExpress"
connectStringBuilder.InitialCatalog = "北风贸易"
connectStringBuilder.IntegratedSecurity = True
Try
' 建立连接。
Using con As New SqlConnection(connectStringBuilder.ConnectionString)
Dim fileLen As Integer ' 取得上传之照片档的长度。
fileLen = FileUpload1.PostedFile.ContentLength ' 建立一个字节数组来持有文件的内容。 Dim Input(fileLen) As Byte Input = FileUpload1.FileBytes
Dim updateCMD As SqlCommand = New SqlCommand( _
"INSERT INTO 练习作者 (作者姓名, 作者电话, 作者玉照) " & _
"VALUES (@AuthorName, @TelePhone, @Photo)", con)
Dim AuthorNameParameter As SqlParameter = _
New SqlParameter("@AuthorName", SqlDbType.NVarChar, 10)
If Me.txtAuthorName.Text.Trim().Equals("") Then
AuthorNameParameter.Value = "章立民研究室"
Else
AuthorNameParameter.Value = Me.txtAuthorName.Text.Trim()
End If
updateCMD.Parameters.Add(AuthorNameParameter)
Dim TelephoneParameter As SqlParameter = _
New SqlParameter("@TelePhone", SqlDbType.NVarChar, 20)
If Me.txtAuthorName.Text.Trim().Equals("") Then
TelephoneParameter.Value = "(02)123456789"
Else
TelephoneParameter.Value = Me.txtTelephone.Text.Trim()
End If
updateCMD.Parameters.Add(TelephoneParameter)
Dim PhotoParameter As SqlParameter = _ New SqlParameter("@Photo", SqlDbType.Image) PhotoParameter.Value = Input updateCMD.Parameters.Add(PhotoParameter)
con.Open()
updateCMD.ExecuteNonQuery()
con.Close()
Me.lblMessage.Text = "成功新增数据记录"
End Using
Catch ex As Exception
Me.lblMessage.Text = "发生错误" & vbCrLf & ex.ToString
Throw New Exception(ex.Message)
End Try
End Sub
我们在「Visual Basic 2005 文件 IO 与数据存取秘诀」与「Visual C# 2005 文件 IO 与资料存取秘诀」这两本书的第七章对于“大型对象(LOB) 的存取秘诀”有深入的探讨,请自行参考之。
另外,我们会找个时间来谈谈ASP.NET AJAX之 UpdatePanel 控件与FileUpload 控件的兼容性问题。
相关文章推荐
- ASP.NET 2.0 - 如何于网页上新增包括图片在内的数据至数据库
- asp.net 2.0 网页发送数据邮件和数据库
- 如何在ASP.Net 中把图片存入数据库
- ASP.NET 2.0 POST数据给另外的网页
- Asp.net 2.0(C#)图片存储到数据库和从数据库读取显示
- 如何将图片以Image类型存储到数据库 (asp.net) 如何从数据库中读取Image类型的字段(asp.net)
- [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role
- 如何在ASP.Net 中把图片存入数据库
- [代码]如何在ASP.NET网页间传递数据
- 使用asp.net 2.0的CreateUserwizard控件如何向自己的数据表中添加数据
- ASP.NET 2.0中的数据操作:给新增、编辑界面增加验证控件 (翻译)
- ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中
- 在ASP.NET 2.0中操作数据之七十:配置数据库连接和命令等级设置
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- 如何在ASP.Net 中把图片存入数据库
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- 如何在Spread ASP.NET中显示数据库的数据关系?
- 如何在ASP.Net 中把图片存入数据库
- 如何在ASP.NET 网页间传递数据[转]
- ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中