2016-06-15 9 views
0

ちょうど先頭へ-----これはもはや私には当てはまりません。私は、私のform.loadに次の2行を追加することでそれを修正しました。例外を引き起こすデータアダプタ更新コマンド

cb.QuotePrefix = "[" 
    cb.QuoteSuffix = "]" 

それは私の問題を修正しており、あなたのためにそれを並べ替えることを願っています。

私はVB.netで、私が働いている会社のトレーナーのためのスケジューラーとして働くアプリケーションを持っています。編集モード(情報が保存されているデータベースを更新できる)では、多数のボタン、トレーナーの追加と削除、テーブルへの追加などがあります。

問題を引き起こすボタンは、保存/更新ボタンです。追加された列を更新するためのコマンドと、削除された列のコマンドと、他の変更されたデータを単に更新する第3のコマンドの3つのコマンドセットがあります。私はそれがおそらくより効率的かもしれないことは分かっていますが、ああ、私は後でそれに着きます。

問題は、コードの最後のチャンクには、データソースを更新するデータアダプタである「da.update(ds)」が含まれていることです。このコマンドは、私たちのSQLサーバーに接続する他のアプリケーションでも問題なく動作しますが、ここで問題が発生します。

最初のセルの値がnullの任意の列には、「近くに不適切な構文 『列ヘッダーの最初の2つの文字』。」

を言って例外が発生します

今、私はこの例外が原因であると考えました - 例外のために - 私は列の名前を誤って使用していました。これは毎週の月曜日の日付です(例えば01/02/2016)。 '01'の近くに誤った構文が表示されます。この場合には。

しかし、命名規則を変更しても、例外が示唆するようにこの問題は解決されず、FIRST値がヌルの列でのみ発生します。つまり、最初のトレーナーは今週何も計画していません。

誰もが、このかなり大きなテーブルのすべてのヌルを基本的に埋め込むことはありませんどのような方法についての任意のアイデアがありますか?それがうまくいくことは分かっていますが、かなり時間がかかります。他の解決策がなければ、これをやっていきたいと思います。

私はインターネット上を見回し、正確な問題に関連する解決策を見つけられていないので、助けていただければ幸いです。

重要な場合 - ここに問題の原因となっている機能があります。

Dim da As OleDbDataAdapter 'The datasets and adapters variables. 
Dim da2 As OleDbDataAdapter 
Public ds As DataSet = New DataSet 
Public ds2 As DataSet = New DataSet 


    'Connection String. Connects to the server and finds the database and table listed. 
    cs = "Provider=SQLOLEDB;" 
    cs &= "Server=SOFWAREDEVSQLSE\SQLEXPRESS;" 
    cs &= "Database=MTS2;" 
    cs &= "User Id=;" 'You don't need to see that to be fair. 
    cs &= "Password=;" 'You don't need to see that to be fair. 
    sql = "Select * FROM MTS2;" 

    'Runs the string. Flares up a timed out error if connection could not be established. 
    Try 
     da = New OleDbDataAdapter(sql, cs) 
     da.Fill(ds) 
     da2 = New OleDbDataAdapter(sql, cs) 
     da2.Fill(ds2) 
    Catch ex As Exception 
     MsgBox("Connection failed. Please ensure you have a suitable connection to the Training network. Otherwise, refer to helpdesk support for further assistance.") 
     Me.Close() 
    End Try 
    dgvSchedule.DataSource = ds.Tables(0) 


Private Function save() 

    'Try 
    ''This section reads the SQL server for column names, and adds any that are listed in the DGV, but not the database. I know its a little messy but itll do. 
    Dim columnnum As Integer = -1 
    Dim columname As String 
    For Each column In ds.Tables(0).Columns 
     columnnum = columnnum + 1 
     columname = dgvSchedule.Columns(columnnum).HeaderText 
     If Not ds2.Tables(0).Columns.Contains(columname) Then 
      Dim SqlAddCol As String = "ALTER TABLE MTS2 ADD [" & columname.Trim() & "] nvarchar(255)" 
      Using con As New OleDbConnection(cs) 
       Using cmd As New OleDbCommand(SqlAddCol, con) 
        con.Open() 
        cmd.ExecuteNonQuery() 
       End Using 
      End Using 

     End If 
    Next 

    columnnum = -1 
    For Each column In ds2.Tables(0).Columns 
     columnnum = columnnum + 1 
     columname = ds2.Tables(0).Columns(columnnum).ColumnName 
     If Not ds.Tables(0).Columns.Contains(columname) Then 
      Dim SqlDelCol As String = "ALTER TABLE MTS2 DROP COLUMN [" & columname.Trim() & "]" 
      Using con As New OleDbConnection(cs) 
       Using cmd As New OleDbCommand(SqlDelCol, con) 
        con.Open() 
        cmd.ExecuteNonQuery() 
       End Using 
      End Using 
     End If 
    Next 

    ds2.Tables.Clear() 
    da2 = New OleDbDataAdapter(sql, cs) 
    da2.Fill(ds2) 

    da.Update(ds) ''''' The exception is thrown here. " Incorrect syntax near '01'." 
    DataTableColours() 
    MessageBox.Show("Data saved successfully. New weeks and trainers added and deleted. Changed values updated.") 
    'Catch 
    ' MessageBox.Show("Data failed to update properly. Please ensure you are connected to the Baltic network and try again. If the problem persists, seek IT support.") 
    'End Try 

End Function 

関数は、SQLクエリがその後追加する走っている(DS2にある)元の列とDS内の現在の列をとることによって、サーバへのデータ・グリッド・ビュー(DGVSchedule)の値を保存または列の不一致を取り除きます。 DS2はDSと同じ値を使用するように更新されます。最後に、DA.update(DS)が呼び出され、他のすべての変更された値が理論的にSQLサーバーに更新されます。代わりに、私たちの独特の例外が発生しています。

ご協力いただきありがとうございます。

+0

ここでdaとdsはこのコードで宣言していますda.Update(ds),,より良いヘルプのためにコード全体を表示してください –

+0

@NazirUllahそれをあなたのために並べ替えました。あなたが見たい場合は、今すぐそこに –

+0

更新メソッドの前にデバッガが何dsに存在するデータをチェックする –

答えて

1

私は直面していた問題を解決しました。私は、私のform.loadに次の2行を追加することでそれを修正しました。

cb.QuotePrefix = "[" 
    cb.QuoteSuffix = "]" 

基本的に、私は今やダンボールのように感じますが、これは問題を解決しました。

関連する問題