none
SqlDataAdpter Updateで文字書き込み制限があるのでしょうか? RRS feed

  • 質問

  • SQL Server2000で、フィールドで、データ型をvarchar指定して、長さ8000(最大文字に設定)

    下記の処理をしたところ、TextBoxの文字数約1900文字をUpdate処理をした時点で1600文字になり残りの文字が書き込みません。何かUpdate処理には制約があるのでしょうか。(ある書籍を参考していますがその中では最大8000文字が格納できるのなっていたのですが)

    Dim a As BindingManagerBase = BindingContext(DsReport1, "report_comment")

    Dim b As DataRowView = CType(a.Current, DataRowView)

    b.BeginEdit()

    b(""report_comment") = txtComment.Text

                      'この時点ではrepot_commentには1900文字が格納されているようです

    b.EndEdit()

    SqlDataAdapter1.Update(DsReport1, "report_comment")

    再度、表示(格納文章)をすると1600文字までしか表示(格納)されません、いろいろ調べながら動かして見ると、どうもUpdate時に1600以降を無視(?)して格納しているようなのですが、どなたかご指導をお願いします

    2006年4月22日 0:29

すべての返信

  • 1600もじってのがどうかはわかりませんが、まずvarcharはやめるべきです。

    varcharはバイト数で、内部のUnicodeとの親和性は高くありません。

    お勧めはnvarcharです。

     

    次に.UpdateはDataAdapter.UpdateCommand.Parametersあたりでパラメータの型を決めています。

    このあたりにvarchar 8000という設定がされているかを確認してください。

     

    プロファイラで出ているSQLwo調べてください。

    とりあえずこの3つくらいを押さえて見ましょう。

    2006年4月22日 2:59
  • 中博俊様

    いつもご指導ありがとうございます。

    早速、nvarcharに変更をしてテストをしましたが、やはり1600文字以降は格納できませんでした。

    パラメータですが、’Winsiwsフォームでデザイン・・・のことでしょうか?(申し訳ないのですがよくわからないので)その中であれば、下記のように8箇所ありました。

    me.SqlUpdateCommand2.Parameters.Add(・・・・("@テー名",System.Data.SqlDbType.VaChar, 1600, ("@テー名",))

    me.SqlUpdateCommand2.Parameters.Add(・・・・("Original_@テー名",System.Data.SqlDbType.VaChar, 1600, ・・・・)

    Me.SqlInsertCommand2・・・・

    Me.SqlDeleteCommand2・・・

    Me.SqlDeleteCommand3・・・

    Me.SqlInsertCommand3・・・・

    me.SqlUpdateCommand3・・・・・

    me.SqlUpdateCommand3・・・・・

    VaChar, 1600 のところを8000に変えてもよいものでしょうか?

    つたない説明で申し訳ございませんが、ご指導のほどよろしくお願いします。

     

    2006年4月22日 5:02
  • 変えてください。
    2006年4月22日 11:15
  • 中博俊様

    結果報告が遅くなり申し訳ございません。

    先ほど修正、テストした結果、ちゃんと格納できました。大変ありがとうございました。

    今後ともご指導の程、よろしくお願いします。

    2006年4月23日 10:52