vb.net 解析查询灵活列名时出错
Posted
技术标签:
【中文标题】vb.net 解析查询灵活列名时出错【英文标题】:vb.net error in parsing query of flexible column name 【发布时间】:2018-04-11 08:08:44 【问题描述】:我的查询有问题。
如果数据集存在于另一个数据表中,我正在尝试更新它。
我有一个数据表 ds1.table(0)
有 18 列和 2 个主键,数据表 ds2.table(0)
有灵活的行数。
如果ds1.table(0)
的列名存在于ds2.table(0)
的行中,我想更新我的数据库。
If rc1 > 0 Then
For Each co As DataColumn In ds1.Tables(0).Columns
Dim ColName As String = co.ColumnName
If rc2 > 0 Then
For Each ro As DataRow In ds2.Tables(0).Rows
Dim RoName As String = ro(0).ToString
If RoName.Contains(ColName) Then
Dim cmnd1 As SqlCeCommand
Try
con.Open()
Dim cry As String = "UPDATE serdate SET ['" & ColName & "'] = @date WHERE ((company = '" & Company & "') AND (number = '" & number & "'))"
cmnd1 = New SqlCeCommand(cry, con)
cmnd1.Parameters.Add(New SqlCeParameter("@date", Now))
cmnd1.ExecuteNonQuery()
MsgBox("Update Success")
Catch ex As Exception
MsgBox("Query Error! " & ex.Message)
Finally
con.Close()
End Try
End If
Next
End If
Next
End If
我遇到了一些错误。
错误是
解析查询时出错:列名无效
【问题讨论】:
您的列名是否真的在开头和结尾包含'
字符?
调试和检查 ColName 的值
你真的要检查RoName.Contains(ColName)
吗?例如,如果 RoName 是“Something”而 ColName 是“thing”,那将是正确的。你可能想要=
。
【参考方案1】:
该错误是由您尝试更新数据库中不存在的列引起的。查看表定义以确保该列确实存在。但是,您将 '
放在列名周围,这在引用列时不是必需的,并且很可能导致错误。删除'
并使用有效的列名来解决此问题。
顺便说一句,您的 SQL 查询仍然容易受到 SQL 注入的攻击。您应该为要放入查询的每个变量使用参数,例如您输入日期的方式。
【讨论】:
以上是关于vb.net 解析查询灵活列名时出错的主要内容,如果未能解决你的问题,请参考以下文章
VB.NET/ASP.NET 4.0 自定义配置部分:“创建配置部分处理程序时出错”
在数据库中获取日期时出错(BETWEEN 子句| VB.NET|OLE)
C#/VB.NET中 UDP协议连接服务器问题...运行没出错..但是收不到信息.