C#でAccess2003データ更新時に発生するエラーの内容がわかりません

このQ&Aのポイント
  • C#でAccess2003データ更新時に発生するエラーの内容がわからなくて困っています。データベースの読込み、変更、更新はできるのですが、一部のフィールド名に付いているキーワードと同じ名前の場合にエラーが発生します。フィールド名を変更することができないため、エラーを回避する方法を教えてください。
  • C#でAccess2003データ更新時に発生するエラーの内容がわかりません。特定のフィールド名について、キーワードと同じ名前が付いているためにエラーが発生しています。フィールド名を変更することはできないため、どのようにエラーを回避できるかご教授ください。
  • C#でAccess2003データ更新時に発生するエラーの内容がわからなくて困っています。特定のフィールド名にキーワードと同じ名前が付いているためにエラーが発生します。フィールド名を変更することはできないため、どのようにエラーを解決できるかアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

C#でAccess2003データ更新時に発生するのエラーの内容がわからなくて困っています。

お世話になります。 とある工場で使用されているデータベースの内容をC#で変更、更新を するプログラム改造を手がけています。データベースはAccess2003で 作成されていて、データベースの読込み、変更、更新はできるのですが、 一部のフィールド名に "DateTime" 、"String" と名前がつけられている箇所があり、この部分については"UPDATEステートメントの構文エラーです" となってしまします。他の部分については全く問題なく更新できています。例えば"Data01"など… プログラム概要は System.Data.OleDb.OleDbConnection cn; System.Data.OleDb.OleDbDataAdapter ap; System.Data.OleDb.OleDbCommandBuilder cb; DataSet ds; DataRow dr; DataTable dt; ---処理--- dt.Rows[n]["DateTime"] = DateTime.Now.ToString(); ap.Update(ds,"t_MINIDATATBL"); となっており、"DateTime" "String"フィールドのところだけアップデート実行のところで例外処理となってしまいます。 "DateTime"や"String"などのようにC#で使われているキーワードと同じ名前はまずいのでしょうか? しかし、データベースは客先の物なので勝手にフィールド名は変えられません。 一時的にフィールド名を変更して、処理終了時に元のフィールド名に戻すなどという手法などありますでしょうか? また、他の方法などもありましたらご教授願います。 環境: コンパイラ VisualStudio2008 C# データベース Microsoft Access2003 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

やってみたいこと (1)dt.Rows[n]["DateTime"]→dt.Rows[n]["[ateTime]] (2)DataSet ではなく、Stringで更新SQLを生成し、Connectionに対して SQLの実行を行うと言うのはダメですか? この時、予約語のフィールドは"[]"で囲みます。 UPDATE xxTable Set [DateTime]=#2009/07/31 12:00:00#, [String]='ANY',data01=100,~

rsb18609
質問者

お礼

ご教授頂いた方法で無事更新ができました。 修正後 System.Data.OleDb.OleDbCommand com = new OleDbCommand("UPDATE MINIDATATBL0 " + "SET [DateTime] = " + "'" + DateTime.Now.ToString() + "'" + " WHERE SetCounter = 0", cn); 大変助かりました。 感謝いたします。

rsb18609
質問者

補足

お返事ありがとうございます。 ご指摘の方法を試してみます。 後ほど、結果を報告させていただきます。

関連するQ&A

  • Accessにてデータの更新

    Accessにて、フォームにボタンを作成し、クリックすると フォームのテキストボックスのデータを取得し、 テーブルのデータを更新するVBAを作りたいのですが、 mySQL = "UPDATE テーブル名 SET フィールド名 = '1234'" このようにすると、フィールドが1234のデータに更新されるのですが、 これを namae =Me!テキストボックス名 mySQL = "UPDATE テーブル名 SET フィールド名 = namae" とするとうまくいきません。 正しい書き方をお願いします。

  • Accessでデータ更新できない

    Accessのクエリでデータを書き換えようとしてもできません。データベースは、更新可能な権限でアクセスしており、データソースも読み取り専用にチェックをつけていません。SQL*plusにて、おなじサービス名、ユーザー、パスワードで、updateはできるのです。どなたかご教授お願いします。

  • C#でアクセスに更新するときの文字の色&呼び出すときの文字の色

    はじめまして。今回質問させていただく内容は。 C#でSQL文によってACCESSに更新するとき、更新した文字を更新したとわかりやすくACCESSのテーブルに赤色で表示させたいのですが。 SQL文によってどのように文字の色を変化させて追加するのかわからずにいます。 そしてこのことが可能であるならば、ACCESSのテーブルをSQL文で呼び出しデータグリッドビューに表示させるときもACCESSのテーブルのレコードの文字の色もまるっきり同じに呼び出すことは可能でしょうか? 下記にSQLでアクセスに更新するプログラミングと呼び出すとき使ったプログラミングを記述しておきます。 もし可能なら方法などご回答いただけたら嬉しいです。 ACCESSのデータを更新するプログラム System.Data.OleDb.OleDbCommandBuilder cBuild; System.Data.OleDb.OleDbDataAdapter dAdp; DataSet dSet = new DataSet("t_作業実績"); DataTable dTbl; System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source =C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb;"); //データセットに取得する dAdp = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM 作業実績",cn); dAdp.Fill(dSet, "t_作業実績"); //コマンドビルダの作成 cBuild = new System.Data.OleDb.OleDbCommandBuilder(dAdp); //データセットからテーブルを取得して更新する dTbl = dSet.Tables["t_作業実績"]; dTbl.Rows[num-1]["移動個数"] = textBox2.Text; dAdp.Update(dSet, "t_作業実績"); MessageBox.Show("ok"); ACCESSからデータグリッドビューへ呼び出すプログラム System.Data.OleDb.OleDbDataAdapter dAdp; DataSet dSet = new DataSet("作業実績"); System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb;"); //C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb //datasetに取得し、DATAGRIDVIEWに関連ずけする dAdp = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM 作業実績", cn); dAdp.Fill(dSet, "作業実績"); dataGridView2.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray; dataGridView2.DataSource = dSet.Tables["作業実績"];

  • C# データバインディングされたプロパティの更新

    C#の質問になります。 INotifyPropertyChangedを実装したプロパティをラベルにバインディングして、プロパティの値を表示しています。 ボタンを押下するとプロパティの値を更新するプログラムを追加しました。プロパティの値が変わるとラベルの表記も自動で更新されています。 ある時、プロパティに収める値を演算する処理に3秒掛かるようになりました。結果がラベルに反映されるまでの時間は重要ではないため、この部分をスレッド化しようと思い、下記のようなプログラムを作成しました。 結果として、下記のプログラムはInvalidOperationExceptionを発生し動作しません。 別スレッドからラベルにバインディングしているプロパティを変更したためですが、正しい?(一般的な)解決法がわかりません。 そもそも設計が間違っているという考えも大いにあり得るのですが、その場合、どの様に実装すべきかご教示いただければと思います。 public partial class Form1 : Form { private SampleViewModel svm = new SampleViewModel(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.DataBindings.Add(new Binding("Text", svm.Data, "MyProperty", true, DataSourceUpdateMode.OnPropertyChanged)); } private void button1_Click(object sender, EventArgs e) { // データ更新 svm.Update(); } } internal sealed class SampleViewModel { public SampleModel Data { get { return this._Data; } set { this._Data = value; } } private SampleModel _Data = new SampleModel(); public void Update() { // 重い処理がなかったときは下記の1行だった //Data.MyProperty = DateTime.Now.ToLongTimeString(); // 重い処理をスレッドで処理 // label1にMyPropertyをバインディングしているからInvalidOperationExceptionが発生した Task.Factory.StartNew(() => { // 重い処理ダミー System.Threading.Thread.Sleep(3000); return DateTime.Now.ToLongTimeString(); } ).ContinueWith(task => { Data.MyProperty = task.Result; }); } } // 以下お決まりの実装 internal sealed class SampleModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public string MyProperty { get { return this._MyProperty; } set { this._MyProperty = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("MyProperty")); } } } private string _MyProperty = DateTime.Now.ToLongTimeString(); }

  • データベースのデータ更新について

    ネットショップの商品データの管理にMySQLを使用しています。 特定の日付以降、価格を変更(データベースの値を更新)しようと 考えているのですが、これをあらかじめタイマー製のスクリプトなどを組み、自動でする事は可能でしょうか? フィールド数や属性などは変更せず、あくまで値の更新(UPDATE?)のみです。 どなたか良い方法をご存じ・思いつく方、ご教示宜しく御願い致します。

    • ベストアンサー
    • MySQL
  • ACCESSへの更新に関して

    以下のような記述をして、VBからACCESSのテーブルに書き込みを行おうとしています。 その際に、開発をしているVisual Basic2008のデバックモードでは、問題なくACCESSに 更新ができますが、コンパイルしてできあがった"EXE"から実行した場合、ACCESSへの更新ができません。 エラーが起こっているかと思い、updateのあるfor文にポップアップを出すような仕掛けを作り、試してみましが、 そこを通過するものの、エラーも何も起こらずに正常終了してしまいます。 何が原因でしょうか。。。教えて下さい。 環境  Windows7/ACCESS2000/VB2008/参照設定:Microsoft ActiveX Data Objects 2.8 Library   'データベースファイル名 Dim dname As String = "C:\test.mdb" 'データベースパラメータ Dim strDatbasePara As String Dim Cnn As New ADODB.Connection Dim Rst As New ADODB.Recordset strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=" + dname + ";" + _ "Jet OLEDB:Engine Type=5;" Try Cnn.Open(strDatbasePara) Rst.Open("table", Cnn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic) If Rst.EOF Then For jcount = 0 To icount - 1 Rst.AddNew() Rst.Fields("項目1").Value = "AAA" Rst.Update() Next End If Rst.Close() Catch ex As Exception smsg = "失敗しました。" MessageBox.Show(smsg, "更新", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try Cnn = Nothing Rst = Nothing

  • アクセスで、テーブルのデータが更新できない

    アクセスで、テーブルのデータが更新できない accessについての質問なのですが、テーブルの中のデータを(フォーム等を使わず)テーブルを開いて直接データを書き換えました。 フィールド名などの変更でなく、テーブルの中身の更新です。 そのあと、数日間はその変更された内容が保持されていたのですが、1週間もたたないうちに、またもとに戻っていたのです。(3回以上、同じことがありました) これは何か原因があるのでしょうか。それとも、このaccess自体が何かおかしくなっているのでしょうか??

  • LISTBOXの内容が更新されません。

    VB初心者です。よろしくお願いします。 visual basic2010expressにて作成してます 担当者の新規・更新のプログラムで テキストBOX(2)・LISTbox(1)・ボタンで構成されてます。 DBを読み込み LISTBOXに表示し LISTBOXで セレクトされたものを テキストBOXに表示し 修正し 更新処理(DB更新・LISTBOX更新)をします。 新規の場合は テキストBOXに入力し 新規処理(DB追加・LISTBOX更新)をします。 DB更新迄はされるのですが リストボックスに反映されません。 再度 更新ボタンを押下すると 変更後の内容になります。 初心者の為 コードが分かりにくいと思いますがよろしくお願いします。 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load '**********リストボックスセット********** LISTBOX_SET() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click '**********新規登録********** 'データベース接続用オブジェクト生成 Try Dim CON As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") '開始 CON.Open() Dim selectcommand As String = "INSERT INTO tantousya (ta_no, ta_mei) VALUES ('{0}', '{1}' );" Using cmb As OleDbCommand = New OleDbCommand( String.Format( selectcommand, TextBox1.Text, TextBox2.Text), CON) cmb.ExecuteNonQuery() End Using '**********リストボックスセット********** LISTBOX_SET() End Try End Sub Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click End End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click '**********変更登録********** 'データベース接続用オブジェクト生成 Try Dim CON As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") '開始 CON.Open() Dim selectcommand As String = "UPDATE tantousya SET ta_mei = '{0}' WHERE ta_no = {1};" Using cmb As OleDbCommand = New OleDbCommand( String.Format(selectcommand, TextBox2.Text, TextBox1.Text), CON) cmb.ExecuteNonQuery() End Using      '**********リストボックスセット********** LISTBOX_SET() End Try End Sub Private Sub LISTBOX_SET() '**********リストボックスセット********** '接続文字列 Dim i As Integer 'データベース接続用オブジェクト生成 Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") Try '開始 con.Open() Dim SQLCom As OleDbCommand = con.CreateCommand Dim selectcommand As String = "SELECT * FROM tantousya;" Dim da As OleDbDataAdapter = New OleDbDataAdapter(selectcommand, con) Dim ds As DataSet = New DataSet() 'データーセット() da.Fill(ds) Dim LIST As List(Of String) = New List(Of String)       For i = 0 To ds.Tables(0).Rows.Count - 1      LIST.Add(ds.Tables(0).Rows(i)("ta_no") & ds.Tables(0).Rows(i)("ta_mei") Next ListBox1.DataSource = LIST ・・・・・・・・・<ここのLISTの内容は変更になってます>・・・ Finally 'データベース終了 con.Close() End Try End Sub Private Sub ListBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown TextBox1.Text = MID(ListBox1.SelectedItem,1,2)     TextBox2.Text = MID(ListBox1.SelectedItem,3,10) End Sub

  • ASPでAccessのデータを更新するプログラム(初心者です)

    ASPの知識がないので質問が分り難いと思いますが、宜しくお願いします。 ASPの本についていたサンプルデータを使って、Webページを作成していますが、プログラムの知識がないので、サンプルデータをコピー&ペーストして四苦八苦しながら作成している次第です。データベースのデータを表示させたり新しいデータを追加するところまではできましたが、データを更新するサンプルがないので登録データを更新することができません。更新用のフォームに現在登録されているデータを表示させるところまではできました。ここで変更をしたデータをupdate.aspにデータを送信してデータベースのデータを更新させたいのですが、このupdate.aspに記載するプログラムがよくわかりません。初心者の私でも解るように、どなたか教えていただけませんでしょうか。質問の仕方が変かも知れませんが、宜しくお願いいたします。

  • エラーについて(更新)

    Txtファイルには 1,A ~ 10,A のデータが入ってます。 データベースはmysqlで mysqlにはフィールドは ID NAMEで 1  1 ~ 9  1 のデータ9つが入ってます。 Txtファイルの10番目のデータを更新させると データベースにそれに対応したコードがないため エラーが出るはずなのですが、 エラーの形が次のようになります。 データが登録されました。データが登録されました。アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません。 アクティブなトランザクションがありません 何故なのでしょうか? 自分ではtxtファイルの10番目のデータを更新するときにだけエラーがでると考えているのですがそのように 動作してくれません。何故そのように動作しないのでしょうか?また、エラーがでているにもかかわらず 更新処理は全て正常に動作しています。 コードについても載せたいのですが 文字数制限で載せることができませんので 回答していただいた後に、補足で載せさせて頂きたい と思います。

専門家に質問してみよう