Sql 尝试更新记录时收到错误
在我的程序中,我有一个名为runSQL的函数,如下所示:Sql 尝试更新记录时收到错误,sql,vb.net,ms-access,sqlparameter,sql-parametrized-query,Sql,Vb.net,Ms Access,Sqlparameter,Sql Parametrized Query,在我的程序中,我有一个名为runSQL的函数,如下所示: Dim Connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TrainingLog.accdb") Dim DT As New DataTable Dim DataAdapter As OleDb.OleDbDataAdapter Connection.Open() DataAdapt
Dim Connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TrainingLog.accdb")
Dim DT As New DataTable
Dim DataAdapter As OleDb.OleDbDataAdapter
Connection.Open()
DataAdapter = New OleDb.OleDbDataAdapter(query, Connection)
DT.Clear()
DataAdapter.Fill(DT)
Connection.Close()
Return DT
我正在尝试使用更新字符串更新数据库中的记录,该字符串来源于以下代码:
Dim sqlString As String
sqlString = "UPDATE UserRecords set FirstName = '" & txtName.Text
sqlString = sqlString & "', LastName = '" & txtSurname.Text
If ChkSmoker.Checked = True Then
sqlString = sqlString & "', Smoker = true"
ElseIf ChkSmoker.Checked = False Then
sqlString = sqlString & "', Smoker = false"
End If
sqlString = sqlString & ", Weight = " & txtWeight.Text
If RdoMale.Checked = True Then
sqlString = sqlString & ", Gender = 'm'"
ElseIf RdoFemale.Checked = True Then
sqlString = sqlString & ", Gender = 'f'"
End If
sqlString = sqlString & " WHERE UserName = '" & LstUsers.SelectedItem.ToString & "'"
runSQL(sqlString)
但是,单击save按钮后,runSQL函数的第7行(不包括空行,因此这是DataAdapter.Fill(DT)行)出现了一个错误,该行表示“没有为一个或多个必需参数提供值。”
我想知道是否有人知道这是为什么或者如何修复它
我确实想到的一件事是,在正在更新的表中,除了我的UPDATE语句中提到的字段之外,还有其他字段。例如,有一个名为“TeamMember”的Yes/no字段,我在update语句中没有提到它。
当使用更新函数时,我是否必须为每个字段提供值,即使是那些未更改的字段
谢谢你的阅读,希望能有所帮助 您不应该自己编写SQL查询。创建参数化查询或使用存储过程更容易、更安全(要避免SQL注入)。然后通过pasing查询或存储过程名称和参数值来执行它 此外,通过这种方式,您不必考虑特定值的正确格式。例如,如何设置日期格式?还有,如何设置布尔值的格式?您的查询最有可能出现的问题是您试图为
Smoker
列设置的false
或true
值,因为在TSQL中,这是一个位值,只能是0
或1
选中此项可查看使用参数的示例:(单击VB选项卡可在VB中查看它)。您将看到,您在查询中定义了一个参数,该参数指定了一个带有@
前缀的名称,然后您只需为查询中的每个参数传递一个值,它将以正确的格式传递给服务器,而无需您处理它
取自其中一个样本:
Dim queryString As String = _
"SELECT ProductID, UnitPrice, ProductName from dbo.Products " _
& "WHERE UnitPrice > @pricePoint " _
& "ORDER BY UnitPrice DESC;"
Dim command As New SqlCommand(queryString, connection)
command.Parameters.AddWithValue("@pricePoint", paramValue)
'' command.ExecuteXXX
请注意,您可以以不同的方式执行该命令,具体取决于您是否需要简单地执行该命令,或者获得一个标量值或完整的数据集。老实说,我不知道。我只是在学校学习VisualBasic,我被告知要使用SQL部分,而不是教他们。你有没有看过所有代码生成的SQL语句?这将是第一件要做的事情,看看它是否是你所期望的。如果您看过,请告诉我们您看到了什么。UPDATE UserRecords set FirstName='Dave',LastName='Smith',Smoker=false,Weight=55,Gender='m',其中UserName='Dave1'runSQL函数看起来像是用于选择行并放入数据表的函数。您正在运行的sql是更新而不是选择。该命令只会返回受影响的行数,而不是可以插入数据表的数据行。我的老师向我们提供了帮助表PDF,这是他说要使用的,但与向数据库添加用户时相同,我现在学的是物理,不是计算机,但我会在电脑上再次检查代码。当我向数据库中添加用户时,我使用代码:(不管怎样,我认为注释不允许我将其粘贴并很好地格式化),但当添加用户时,我在access中的“是/否”列中使用的是或否,它可以用于添加,所以我假设它可以用于编辑我在这里使用代码的程序中的其他地方:(不确定站点上是否允许使用pastebin,但我不认为我可以在注释中正确设置代码格式),使用SQL函数,并使用true作为它的值,效果很好。(TeamMember与原始问题中的吸烟者相同)因此我相当确定问题出在其他地方。“我就是找不到你在哪里,”达特布鲁米说。对不起,我没有意识到这是访问。下一步,试着正确标记你的问题。我已经更正了标签。对不起,我的错。这是我在这个网站上的第一篇帖子,我不确定这些标签是否真的应该是。我发现了这个问题,这是我以前应该看到的非常愚蠢的事情。。。结果在sqlstring中,我试图填充一个名为“LastName”的字段,但在数据库中,该字段名为“姓氏”,我觉得自己像个白痴。如何标记问题的结束?