我是VB.NET的初学者,所以你可能需要忍受我,但我需要编辑这个代码,以便将一个空值传递给我的数据库中的'imageurl'字段。前端是一个Web表单,用户可以在其中输入书籍的详细信息,并可选择上载书籍封面。
我想更改我的代码,以便如果文件上传对话框不符合hasFile,则数据库中生成的GUID字符串将为NULL值(这样我就可以使用NullImageUrl获得'无图像'图像ASP中的财产。)
这是我到目前为止尝试实现的,但是intellisense告诉我“类型字符串的值不能转换为'System.GUID'。
代码背后:
Imports System.Data.OleDb Partial Public Class addBook Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub Protected Sub btn_submission_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_submission.Click Dim noFile As String = Nothing Dim myGUID = Guid.NewGuid() Dim newFileName As String = myGUID.ToString() & ".jpg" Dim fileLocationOnServerHardDisk = Request.MapPath("img/thumb") & "/" & newFileName If fu_picture.HasFile Then fu_picture.SaveAs(fileLocationOnServerHardDisk) Else myGUID = noFile End If Dim oleDbConn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString) Dim SqlString As String = "Insert into booklist(Title,Author,PublicationDate,Pages,Publisher,Blurb,imgurl,AverageRating) Values (@f1,@f2,@f3,@f4,@f5,@f6,@f7,@f8)" Dim cmd As OleDbCommand = New OleDbCommand(SqlString, oleDbConn) cmd.CommandType = CommandType.Text cmd.Parameters.AddWithValue("@f1", tb_booktitle.Text) cmd.Parameters.AddWithValue("@f2", tb_bookauthor.Text) cmd.Parameters.AddWithValue("@f3", tb_bookpubyear.Text) cmd.Parameters.AddWithValue("@f4", tb_bookpages.Text) cmd.Parameters.AddWithValue("@f5", tb_publisher.Text) cmd.Parameters.AddWithValue("@f6", tb_blurb.Text) cmd.Parameters.AddWithValue("@f7", "img/thumb/" & newFileName) cmd.Parameters.AddWithValue("@f8", rbl_Stars.SelectedValue) oleDbConn.Open() cmd.ExecuteNonQuery() System.Threading.Thread.Sleep("2000") Response.Redirect("~/addedrecord.aspx") End Sub Protected Sub rbl_Stars_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rbl_Stars.SelectedIndexChanged End Sub End Class
请告诉我,我的思路是否完全错误!
编辑:目前,即使文件未上传,即使图像本身不存在,也会在数据库表中生成guid字符串+ jpg后缀
答案 0 :(得分:3)
如果您的要求失败,您应该将DBNull.Value传递给您的数据库
cmd.Parameters.AddWithValue("@f7", _
if(fu_picture.HasFile, "img/thumb/" & newFileName, DbNull.Value)
ternary operator允许您在创建参数时测试标志HasFile 如果为false,则将参数值设置为DBNull.Value。如果HasFile为true,则可以构建映像文件的正确路径。当然,这消除了之前在代码中为myGuid分配Nothing的必要性。