ADO.NETの質問・雑談スレ2 (421レス)
ADO.NETの質問・雑談スレ2 http://mevius.5ch.net/test/read.cgi/db/1234077152/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
1: NAME IS NULL [sage] 2009/02/08(日) 16:12:32 ID:??? ADO.NETに関する質問・雑談・評価 etc 何でもどうぞ。 前スレ ADO.NETの質問・雑談スレ http://pc11.2ch.net/test/read.cgi/db/1104630889/ http://mevius.5ch.net/test/read.cgi/db/1234077152/1
402: NAME IS NULL [] 2020/01/26(日) 02:26:51.45 ID:BP0mZu6W バイナリ型のデータの取得で質問があります データベースでアクセスでフィールド型OLE オブジェクト型があり そこにバイナリデータがあります。 具体的にはEXCELのファイルのバイナリが登録されています(これは直接登録) そこからADO.NETでそのバイナリを読み出し クライアントにダウンロードして開けたいと思っています。 プログラム ・・・・・・前半省略 while (reader.Read())//アクセスからデータをバイナリデータを読み込む { ExcelBinary = (Byte[])reader.GetValue(0);//EXCELのバイナリデータ(あらかじめ登録されている) Response.AddHeader("Content-Disposition", "attachment;filename=" + "data.xlsx"); //ヘッダー Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定 Response.BinaryWrite(PhotoData);// HTTP出力ストリームにバイナリ文字の文字列を書き込む Response.Flush(); Response.End(); これでいけるとおもうのですが確かにダウンロードしてEXCELがたちあがるのですが ファイルが壊れているか拡張子が違うとメッセージが出て開けません 疑問点は何か足りない部分があるのでしょうか? ちなみにアクセスでなくファイルのバスにEXCELデータを直接置いた場合はファイルがダウンロードされて 開けます。 さらにFsstreamで書き出して直接開けても同じこのがおこります。 EXCELやPDFはアクセスに登録してダウンロードして開けることはできないのでしょうか? ご教授していただければ幸いです http://mevius.5ch.net/test/read.cgi/db/1234077152/402
403: NAME IS NULL [] 2020/01/26(日) 02:26:56.38 ID:BP0mZu6W バイナリ型のデータの取得で質問があります データベースでアクセスでフィールド型OLE オブジェクト型があり そこにバイナリデータがあります。 具体的にはEXCELのファイルのバイナリが登録されています(これは直接登録) そこからADO.NETでそのバイナリを読み出し クライアントにダウンロードして開けたいと思っています。 プログラム ・・・・・・前半省略 while (reader.Read())//アクセスからデータをバイナリデータを読み込む { ExcelBinary = (Byte[])reader.GetValue(0);//EXCELのバイナリデータ(あらかじめ登録されている) Response.AddHeader("Content-Disposition", "attachment;filename=" + "data.xlsx"); //ヘッダー Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定 Response.BinaryWrite(PhotoData);// HTTP出力ストリームにバイナリ文字の文字列を書き込む Response.Flush(); Response.End(); これでいけるとおもうのですが確かにダウンロードしてEXCELがたちあがるのですが ファイルが壊れているか拡張子が違うとメッセージが出て開けません 疑問点は何か足りない部分があるのでしょうか? ちなみにアクセスでなくファイルのバスにEXCELデータを直接置いた場合はファイルがダウンロードされて 開けます。 さらにFsstreamで書き出して直接開けても同じこのがおこります。 EXCELやPDFはアクセスに登録してダウンロードして開けることはできないのでしょうか? ご教授していただければ幸いです http://mevius.5ch.net/test/read.cgi/db/1234077152/403
404: NAME IS NULL [sage] 2020/01/26(日) 13:40:04.90 ID:??? MIME登録されてないだけだろ IISで設定しろ http://mevius.5ch.net/test/read.cgi/db/1234077152/404
405: NAME IS NULL [] 2020/01/26(日) 18:02:42.11 ID:BP0mZu6W そうなんですか? IISの設定なんているのですか? Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定 ではだめなんですか? http://mevius.5ch.net/test/read.cgi/db/1234077152/405
406: NAME IS NULL [] 2020/01/26(日) 18:30:42.28 ID:BP0mZu6W しかし、ダウンロードはできるのです。 そのファイルが開けないのです。(サポートされていない形式ですのエラーメッセージ) サーバにファイルがある場合は普通にダウンロードできて開けるのです アクセス、SQLServerにバイナリデータとして登録されている場合が 開けないのです。 http://mevius.5ch.net/test/read.cgi/db/1234077152/406
407: NAME IS NULL [] 2020/01/26(日) 20:18:34.75 ID:8nfufEbl ・バイナリデータの格納 ・バイナリデータの読み込み ・データをダウンロードさせる ・(クライアントが)ファイルを開く のうち、どこまで成功してるんだ? そもそも、そのデータは「ファイルの中身」なのか? http://mevius.5ch.net/test/read.cgi/db/1234077152/407
408: NAME IS NULL [] 2020/01/26(日) 20:39:21.04 ID:BP0mZu6W バイナリはあらかじめ格納できているのです それをサーバー側からダウンロードしてアプリを自動的に立ち上げ (要はWebから自動的にPDFを開ける)のと同じようにしたいのです PDF,EXCEL,WORDなどがバイナリとしてアクセスまたはSQLServerでダウンロード して中身を見たいのです Server.MapPath(string.Format(@"./File/{0}", "Test.bmp")); のようにあらかじめファイルをディレクトリにおいたときは Respnse.writeBainaryでうまくいきます 問題はSQLServer アクセスにバイナリとして格納したときはできないのかな?と やっぱり、ディレクトリの位置だけでDBの登録してServer.MapPath でダウンロードしかないのかなと。 http://mevius.5ch.net/test/read.cgi/db/1234077152/408
409: NAME IS NULL [sage] 2020/01/28(火) 23:10:28.36 ID:??? OLEオブジェクト型はバイナリ型じゃないからな OLEヘッダ付きで格納されてるから、OLEヘッダ落とす必要があったはず http://mevius.5ch.net/test/read.cgi/db/1234077152/409
410: NAME IS NULL [sage] 2020/02/03(月) 12:35:43.47 ID:??? そうなんだ。ヘッダー落すのは先頭からバイトを削る事何ですか。わ http://mevius.5ch.net/test/read.cgi/db/1234077152/410
411: NAME IS NULL [sage] 2020/02/03(月) 21:24:17.58 ID:??? 409 確かにマイクロソフトのaspnetの分厚い本にコードの書き方書いてありましたね 少し試して見ます。thanks http://mevius.5ch.net/test/read.cgi/db/1234077152/411
412: NAME IS NULL [] 2020/02/03(月) 22:04:09.51 ID:01WTNDQb 自分の使い方が間違っているだけなのに文句を言うなよ。 http://mevius.5ch.net/test/read.cgi/db/1234077152/412
413: NAME IS NULL [age] 2020/10/29(木) 19:13:13.83 ID:??? 質問すみません。 環境: - OS: Windows 10 (バージョン 2004, ビルド 19041.572) - Visual Studio: Visual Studio 2019 Community (Version 16.7.6) - ターゲット Framework: .NET Framework 4.0/4.7.2 - Driver: Microsoft Access Driver (*.mdb, *.accdb) 16.00.4999.1000 (Access 2016 Redist) コード概要: デーモンとして待ち受け、要求に応じてDB(主に Access accdb データベース)のデータを返すプログラムです。 現象: ADODB.Connection をインスタンス化した connection を Open するとき、実行開始後初回〜数回は正常に値を取得できますが、数分時間をおいた後、再度 connection を Open すると、AccessViolationException が発生します: ``` ハンドルされていない例外: System.AccessViolationException: '保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。' ``` 現状: - デーモンのコンソールには、正常時には、結果が表示されますが、異常時(今回の現象)では「致命的なエラーです。」と表示されます: ``` 致命的なエラーです。 ハンドルされていない例外: System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 場所 ADODB.ConnectionClass.Open(String ConnectionString, String UserID, String Password, Int32 Options) 場所 Project1.Class1.Get(String[] fields, NameValueCollection nameValueCollection) 場所 C:\Users\mona\source\repos\Project1\Project1\Class1.cs:行 196 ``` - "AccessViolation|fatal ado.net|adodb connection open" 等で Google 検索すると、Close 漏れだとかの指摘がありますが、Close は必ずしています。(finally 節で connection.Close() しています) <https://okwave.jp/qa/q3428421.html> - netsh winsock reset で改善したという事例 <https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e41e16b-27b2-40e3-8b6c-83930103e7b8/attempted-to-read-or-write-protected-memory-on-any-sql-connection-open-after-installing-net?forum=netfxbcl> がありましたので試しましたが改善しません。 - Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\Users\mona\Documents\db.accdb;Persist Security Info=False; のような接続文字列の代わりにODBCデータソースでシステムDSNを定義し、DSN=db を指定しても改善しません。 - Visual Studio を管理者権限で実行しても改善しません。 - 試しにコネクションを毎回新規作成していますが改善しません。 英語サイト等も見ましたが先行事例がなかなか見つからず苦慮しています。せめてヒントでもありましたらご教示いただければ幸いです。よろしくお願いいたします。 http://mevius.5ch.net/test/read.cgi/db/1234077152/413
414: 413 [sage] 2020/10/29(木) 19:35:47.21 ID:??? 書き忘れました、データ量(レコード数)ですが、データは複数のテーブルに分かれており(特に JOIN などはしていません)、多いもので 3000件弱、少ないもので数十件です。 データ件数に関係なく発生します。 http://mevius.5ch.net/test/read.cgi/db/1234077152/414
415: NAME IS NULL [sage] 2020/10/29(木) 21:15:01.75 ID:??? ACCESSは、というかOFFICE全般で、サーバサイドでの実行はサポートされない ACE.OLEDBはサービスで動作させる設計にはなってないらしいぞ http://mevius.5ch.net/test/read.cgi/db/1234077152/415
416: 413 [sage] 2020/10/30(金) 19:40:47.64 ID:??? >>415 ありがとうございます。そもそもの使い方として想定されていなくて、せいぜい ASP.NET と組み合わせるのが関の山、といったところでしょうか。 SQLite の利用も検討します。 ちなみに、コードを精査したところ、読み出したいテーブルとは別のDB(別ファイル)にレコード追加をする時にコケているようです。 別DBへの接続を止めたらアクセス違反はなくなりました。 ただ、コード上は、それぞれ別の接続を使用していますし、デバッガでステップ実行する際も、コケない時とコケる時があるので、タイミングの問題なのかと考えています。 取り急ぎは、同じDBへの書き込みで回避できるか検討したいと思います。 http://mevius.5ch.net/test/read.cgi/db/1234077152/416
417: NAME IS NULL [sage] 2020/11/02(月) 03:29:23.50 ID:??? いや、ASP.NETでの動作もサポートされてないから http://mevius.5ch.net/test/read.cgi/db/1234077152/417
418: 413 [sage] 2020/11/03(火) 18:11:33.38 ID:??? >>417 ありがとうございます。 サポート対象外とのこと、SQLiteなりSQL Server Express なりにDBを変えてみたいと思います。 本件クローズとします。 http://mevius.5ch.net/test/read.cgi/db/1234077152/418
419: NAME IS NULL [age] 2020/12/13(日) 21:51:38.83 ID:??? tps:// youtube.com/watch?v=TTDVrOLz6MI http://mevius.5ch.net/test/read.cgi/db/1234077152/419
420: NAME IS NULL [sage] 2022/01/21(金) 02:33:21.35 ID:??? 小さな頃から優等生 http://mevius.5ch.net/test/read.cgi/db/1234077152/420
421: NAME IS NULL [sage] 2023/02/02(木) 13:02:55.86 ID:??? ( )y-~~ ( T)y-~~( T-)y-~~(T-T)y-~~ http://mevius.5ch.net/test/read.cgi/db/1234077152/421
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.004s