【问题标题】:MS-Access and VB.NET Insert work half the timeMS-Access 和 VB.NET Insert 工作一半的时间
【发布时间】:2012-07-18 04:41:11
【问题描述】:

这不是 asp,只是我正在尝试制作的常规本地数据库程序。

我有这个编辑子:

Protected Sub update()

    Dim sqlString As String
    Dim pair_0f_attribute As ArrayList = buildSqlUpdate()

    sqlString = "UPDATE " & getSharedTableName() & " SET "
    sqlString = sqlString & String.Join(", ", pair_0f_attribute.ToArray)
    sqlString = sqlString & " WHERE UID = " & id

    cmd = New OleDbCommand(sqlString, conn)
    cmd.CommandType = CommandType.Text

    ExecuteNonQuery(cmd)

End Sub

这给了我 INSERT 命令错误。我已经分解了这个巨大的插入(我有 70+ 列,我不想手动为我的 db 上的所有 2000+ 行执行此操作)一次只获取 1 个值并检查它失败的位置。

Public Sub editrow(ByVal ID As Integer, ByVal ColumnName As String, ByVal value As Object)

    Dim SqlString As String = "Update " & getSharedTableName() & " Set " & ColumnName & " = ? Where UID = " & ID

    Dim cmd As New OleDbCommand(SqlString, conn)

    cmd.CommandType = CommandType.Text

    cmd.Parameters.AddWithValue(ColumnName, value)

    ExecuteNonQuery(cmd)

End Sub

这适用于用户名,它是一个字符串,级别是一个整数,xp 是一个整数等......对于几个插入来说,它很好,而不是突然在 8 日我在插入语句上得到一个错误。

我的 ColumnName 是“Size”,我尝试将其更改为“MSize”,但仍然出现错误,值为“Medium”。

当 columnname "UserName" 也使用字符串 wokrs 时,为什么这个会失败?

我已经检查了我的数据库,确定字段大小(现在是 MSize)设置为文本,没有默认值,它可以为空,并且最大长度为 255。数据库中的任何字段都没有使用格式或验证或正则表达式 ...

有人对我应该如何进行修复有任何提示吗?

** 编辑

这里是我使用的 buildSqlUpdate():

 Private Function buildSqlUpdate() As ArrayList
    Dim pair_arraryList As New ArrayList
    For Each element As KeyValuePair(Of String, Object) In attributes
        pair_arraryList.Add("[" & element.Key & "] = '" & element.Value & "'")
    Next
    Return pair_arraryList
End Function

在你问之前;)属性是存储在字典中的数据库列名,当我构建一个对象的新实例时,它们的值在运行时填充,它运行良好,并且我插入之前的字符串(即使太长了)当我检查它时似乎做得很好。

***** 编辑 *** **

我按照 Remou 的建议添加了括号,现在我没有得到同样的错误......如果我使用第一个插入(完全构造的插入)我得到这个错误:

(以下表达式中的语法错误(缺少运算符): .... some string value ....

如果我使用编辑行,我没有任何错误(但它很长……花了大约 2 分钟,仅 2k 中的 125 个项目)

【问题讨论】:

  • 你能贴出buildSqlUpdate()的代码吗?
  • 如果你愿意,这里并不需要它,因为我在 editRow 子上也遇到了错误......

标签: vb.net ms-access


【解决方案1】:

大小当然是一个保留字*,应该用括号括起来[size]。在创建诸如您不知道字段(列)名称的代码时,我认为假设您需要括号总是更安全。

* JetACE 中的保留字

【讨论】:

  • 是的,我确实将其更改为 MSize,但这是一个安全的预防措施
【解决方案2】:

上帝,问题出在预制数据库中,列名有错误(organisatoin 而不是 organization)...

不敢相信我花了一个多星期才找到...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多