- PR -

ASP.NET ADO.NET DataRowでAccessメモ型へのデータの更新

1
投稿者投稿内容
SASA
会議室デビュー日: 2003/10/02
投稿数: 17
投稿日時: 2003-10-04 18:52
マルチラインのテキストボックス(T_Note.Text)を作りそれにAccessのメモ型のデータ(note)を落とすことはできるのですが、今度はそれを変更したあとに、更新することができません、データの内容を更新しなければ、問題なく動作しますし
メモ型のフィールドをはずすと問題なく動作します。
エラーの内容は
UPDATE ステートメントの構文エラーです。

Line 587: Dim MyComm As New OleDbCommandBuilder(MyAdapter)
Line 588: MyAdapter.UpdateCommand = MyComm.GetUpdateCommand
Line 589: MyAdapter.Update(MyDset, "テーブル名") ←エラー

以上のような内容です。

データセットには MyRow("note") = T_Note.Text として入れておりますが
これではメモ型の場合データ型の指定等が必要で駄目なのでしょうか?
ご教授下さい。




[ メッセージ編集済み 編集者: SASA 編集日時 2003-10-04 18:52 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2003-10-05 07:47
メモ型のフィールドも正常に動作するようです。
以下のサンプルを参考にしてください。

コード:
Sub Page_Load()
  Dim strSQL As String = "Select * From Employees"
  Dim con As New OleDbConnection(ConfigurationSettings.AppSettings("conStringAccDB"))
  Dim da As New OleDbDataAdapter(strSQL, con)
  Dim cb As New OleDbCommandBuilder(da)
  Dim ds As New DataSet()

  da.Fill(ds)
  Dim dt As DataTable = ds.Tables(0)
  Dim dr As DataRow = dt.Rows(0)
  dr("Notes") = "Updated with DataAdapter"
  da.Update(ds)
  Response.Write("Updated Successfully!")
End Sub


SASA
会議室デビュー日: 2003/10/02
投稿数: 17
投稿日時: 2003-10-05 11:59
ご返答ありがとうございます!
サンプルを参考にし作り直しましたが、やはり無理でした。
しかしサンプルと私のコードの相違点がテーブル名とメモ型のフィールドの名前だけでしたので、フィールドの名前をnoteから notes や コメント と名前を付け替えてやると問題無く動作しました。
MyRow("note") = T_Note.Text

MyRow("notes") = T_Note.Text
SQLの抽出文の方法に問題があるのでしょうか?
後数字から始まるフィールド名も同じようなエラーがでたことが有ってフィールド名を変更するといけたことが有りましたが
MyRow("1") = T_Note.Text
     ↓
MyRow("S1") = T_Note.Text

このような場合ある条件のフィールド名は何かしらのコードが必要なのでしょうか?
表示するのは問題無いのですが、更新になるとどうしてもUPDATEでエラーが起きてしまいます
たびたび質問して申し訳無いのですが、ご教授のほどよろしくお願いします。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-10-06 08:56
引用:

しかしサンプルと私のコードの相違点がテーブル名とメモ型のフィールドの名前だけでしたので、フィールドの名前をnoteから notes や コメント と名前を付け替えてやると問題無く動作しました。
MyRow("note") = T_Note.Text

MyRow("notes") = T_Note.Text
SQLの抽出文の方法に問題があるのでしょうか?
後数字から始まるフィールド名も同じようなエラーがでたことが有ってフィールド名を変更するといけたことが有りましたが
MyRow("1") = T_Note.Text
     ↓
MyRow("S1") = T_Note.Text

このような場合ある条件のフィールド名は何かしらのコードが必要なのでしょうか?
表示するのは問題無いのですが、更新になるとどうしてもUPDATEでエラーが起きてしまいます


noteとかは、予約語とかになってるんじゃないですか?
# 調べてませんので、あしからず。
あと、「1」なんて、数字一文字のフィールド名とか、普通は使わないんじゃないでしょうか?
# 普通に1って書いたら、数値の1と区別がつかない可能性がありますよね?

多分エスケープする(フィールド名と解釈してもらう)ような構文があるようには思いますが(DBによってはないかもしれませんが、ちょっと分かりません)。

DBを変えたらたまたま独自の予約語と重なったとかなら仕方がない場合もあるとは思いますが、わざわざこんなフィールド名を使ってもトラブルを招くだけのように思います。
SASA
会議室デビュー日: 2003/10/02
投稿数: 17
投稿日時: 2003-10-06 14:23
返事ありがとうございます。
そうですよね・・おっしゃる通りです。フィールドの名前を変えれば良いだけなんですよねw
エスケープする方法を少し探してみます。ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)