我在mySql数据库中插入dropdownlist的值时遇到问题。 它表示" INSERT语句中的列少于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配。"
当我从一个下拉列表中选择值2和第二个下拉列表也是相同的数字然后它插入没有问题。但是当价值不同(彼此不相等)时,它就会给我这个问题。
Imports System.Data
Imports System.Data.SqlClient
Partial Class Bevestiging
Inherits System.Web.UI.Page
Dim con As New SqlConnection(" server=BOYAN\SQLEXPRESS; Initial Catalog=GipDatabase; User ID=sa; Password=DitIs1SuperGoedW8woord!")
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
LblFilmnaam.Text = Session("filmnaam")
LblDatum.Text = Session("datum")
Lbltijd.Text = Session("tijd")
LblAantalKin.Text = Session("Aantalkin")
LblAantalVol.Text = Session("AantalVol")
LblTypeZaal.Text = Session("Zaaltype")
LblPrijs.Text = Session("prijs")
End Sub
Protected Sub BtnBevestigen_Click(sender As Object, e As EventArgs) Handles BtnBevestigen.Click
Dim cmd As New SqlCommand()
cmd.Connection = con
cmd.CommandType = CommandType.Text
con.Open()
cmd.CommandText = "insert into TblReserveren(Filmnaam,datum, tijd, Aantalvolwassenen, Aantalkinderen, TypeZaal, Prijs, GebruikerID) Values('" + LblFilmnaam.Text.ToString + "','" + LblDatum.Text + "','" + Lbltijd.Text + "','" + LblAantalVol.Text + "','" + LblAantalKin.Text + "', '" + LblTypeZaal.Text + "', " + LblPrijs.Text + " , (Select ID from TblGebruiker Where Username = '" + Session("Username") + "'))"
cmd.ExecuteNonQuery()
'MessageBox("De film Is gereserveerd!")
'Response.Write("De film Is gereserveerd!")
con.Close()
End Sub
End Class
答案 0 :(得分:0)
您应该使用SQL参数进行查询。通过允许SQL Server重用执行计划,它可以更容易编写,避免数据中的撇号等字符出现问题,有助于防止SQL注入攻击,并且可以提高性能(这并不总是一个问题)。
此外,使用Using
构造可确保为您正确处理非托管资源(What is meant by “managed” vs “unmanaged” resources in .NET?)(如果类具有.Dispose()
方法,则应使用{{1在其上调用Using
或。
因此,您的代码可能如下所示:
.Dispose()
我认为“基准”是指日期,“prijs”是一个价格。价格通常应存储为十进制值。
由于您似乎在会话变量中包含数据,因此我使用这些数据而不是从文本框中检索数据 - 您希望最大程度地降低恶意用户在试图攻击您的网站时更改数据的可能性。
我不知道数据库中列类型的定义,因此请调整参数以匹配数据库定义。
最后,您永远不会使用“sa”登录进行与网络相关的工作。我建议使用“Integrated Security = true”设置。您可能需要在SQL Server中将某些权限授予应用程序使用的应用程序池的标识。