タイトル : DataGridViewでDate型カラムを更新するとエラーになる 投稿日 : 2008/03/09(Sun) 22:14 投稿者 : teraman
1.DataGridViewコントロールにバインドして更新するとき、Date型の値を更新するとエラー(UPDATE ステートメントの構文エラーです。)になります。Text型は正常に動作します。原因が解かりません。 2.以下のHPを参考にSqlからOleDbへ変更して動作確認しました。 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxmclictl/html/1660f69c-5711-45d2-abc1-e25bc6779124.htm 3.以下のプログラムを貼り付けてMdbファイルを変更して確認できます。 Imports System Imports System.Data Imports System.Data.OleDb Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private dataGridView1 As New DataGridView() Private bindingSource1 As New BindingSource() Private dataAdapter As New OleDb.OleDbDataAdapter Private WithEvents reloadButton As New Button() Private WithEvents submitButton As New Button() <STAThreadAttribute()> _ Public Shared Sub Main() Application.Run(New Form1()) End Sub Public Sub New() ' この呼び出しは、Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 Me.dataGridView1.Dock = DockStyle.Fill Me.reloadButton.Text = "reload" Me.submitButton.Text = "submit" Dim panel As New FlowLayoutPanel() panel.Dock = DockStyle.Top panel.AutoSize = True panel.Controls.AddRange(New Control() {Me.reloadButton, Me.submitButton}) Me.Controls.AddRange(New Control() {Me.dataGridView1, panel}) Me.Text = "DataGridView databinding and updating demo" End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load ' Bind the DataGridView to the BindingSource ' and load the data from the database. Me.dataGridView1.DataSource = Me.bindingSource1 GetData("select * from ProjectRev") End Sub Private Sub reloadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles reloadButton.Click ' Reload the data from the database. GetData(Me.dataAdapter.SelectCommand.CommandText) End Sub Private Sub submitButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles submitButton.Click ' Update the database with the user's changes. Me.dataAdapter.Update(CType(Me.bindingSource1.DataSource, DataTable)) End Sub Private Sub GetData(ByVal selectCommand As String) Try ' Specify a connection string. Replace the given value with a ' valid connection string for a Northwind SQL Server sample ' database accessible to your system. Dim connectionString As String = String.Concat("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\terada\Desktop\TEST.mdb ;Persist Security Info=False;") ' Create a new data adapter based on the specified query. Me.dataAdapter = New OleDb.OleDbDataAdapter(selectCommand, connectionString) ' Create a command builder to generate SQL update, insert, and ' delete commands based on selectCommand. These are used to ' update the database. Dim commandBuilder As New OleDb.OleDbCommandBuilder(Me.dataAdapter) ' Populate a new data table and bind it to the BindingSource. Dim table As New DataTable() table.Locale = System.Globalization.CultureInfo.InvariantCulture Me.dataAdapter.Fill(table) Me.bindingSource1.DataSource = table ' Resize the DataGridView columns to fit the newly loaded content. Me.dataGridView1.AutoResizeColumns( _ DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) Catch ex As OleDb.OleDbException MessageBox.Show("To run this example, replace the value of the " + _ "connectionString variable with a connection string that is " + _ "valid for your system.") End Try End Sub End Class |