2012-07-18 57 views
0

這不是asp,只是一個普通的本地數據庫程序,我試圖做。MS-Access和VB.NET插入工作的一半時間

我有這個編輯子:

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+列,我不想手動爲我的數據庫上的所有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是「大小」,我試圖將其更改爲「MSIZE」我仍然得到一個錯誤,並且該值是「中等」。

爲什麼會在列名「用戶名」,它使用一個字符串wokrs過這一個失敗?

我已經檢查我的數據庫,以確保和字段大小(現MSIZE)設置爲文本,沒有默認值,它可以爲空,並有255最大lenght。世界上沒有對數據庫的任何領域使用的格式或驗證或正則表達式...

任何人有我應該如何着手修復這個任何提示?

**編輯

繼承人到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 

你問前;)屬性存儲在與他們的價值dictionnary在運行時填寫的數據庫列名當我構建一個對象的新實例時,它運行良好,並且在我插入之前的字符串(即使太長)似乎很好地構建時,我檢查它。

** * ** 編輯 ** * **

我添加了支架作爲Remou的建議,現在我沒有得到同樣的錯誤...如果我使用的第一個刀片(完全構建一個)我得到這個錯誤:

(語法錯誤(缺少運算符)下面的表達式:....一些字符串值....

如果我使用editrow我沒有任何錯誤(但它的長...花了約2分鐘,只上升到125項出2K)

+0

你可以發佈'buildSqlUpdate()'的代碼嗎? – kaveman 2012-07-18 04:46:32

+0

如果你想,它不是真的需要在這裏,因爲我也得到了editRow子的錯誤... – 2012-07-18 04:48:32

回答

0

神,問題是在預發分貝,那裏有在列名錯誤(organisatoin而不是組織)...

不能相容它花了我一個多星期才發現...

2

尺寸肯定是保留字*和應括起來[size]。當你在你不知道字段名稱(列)的地方創建代碼時,我認爲假設你需要括號總是比較安全的。

Jet *保留字和ACE

+0

是的,我確實改變它爲MSIZ,但它的安全預防措施 – 2012-07-18 12:00:31