<ASP.NET+C#+MSDE> JPEG画像の表示ができません。

このQ&Aのポイント
  • ASP.NET+C#+MSDEで開発を行っており、JPEG画像の表示ができません。
  • MSDEのテーブルにImage型の項目を登録し、ASP.NETのSQL文を書いて画像を取得して表示しようとしていますが、表示されるのは「×」マークだけです。
  • 設定の問題なのかどうかわからないので、アドバイスをお願いします。
回答を見る
  • ベストアンサー

<ASP.NET+C#+MSDE> JPEG画像の表示ができません。

こんばんわ。 ASP.NET+C#+MSDEで開発を行っております。 MSDEのあるテーブルにImage型の項目を用意し、Access2000でリンクを張って、JPEG形式のファイルを登録しました。 ASP.NETの方のSQL文を書いて、画像を取得して表示させようとするのですが、「×」マークしか表示されません。IIS等の設定が悪いのでしょうか? コードはこんな感じです。 ================================================ SqlConnection sqlconn = new SqlConnection(ConfigurationSettings.AppSettings["DSNSTRING"]); SqlCommand sqlcmd = new SqlCommand("SELECT 画像 FROM 画像 WHERE 車番=@id",sqlconn); //パラメータの設定 sqlcmd.Parameters.Add("@id",SqlDbType.Int).Value = productid; //実行する SqlDataReader sqlreader; sqlconn.Open(); sqlreader = sqlcmd.ExecuteReader(); if(sqlreader.Read()) { byte [] b = (byte[])sqlreader.GetValue(0); Response.ContentType = "image/pjpeg"; Response.BinaryWrite(b); } else { Response.StatusCode = (int)HttpStatusCode.NotFound; Response.End(); return; } // 出力を閉じて終了 Response.End(); ================================================ どなたかアドバイスください。お願いします。

  • aw11
  • お礼率68% (30/44)

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

  • ベストアンサー
回答No.1

> Response.ContentType = "image/pjpeg"; image/jpegに直したらうまく動いたりしませんか?

aw11
質問者

お礼

アドバイスありがとうございます。 image/jpegもやってみましたがダメでした。データをGIF形式にしてimage/gifを試してみましたがダメでした。

aw11
質問者

補足

できましたっ! コード自体の問題じゃなくて、SQLServerへのデータの登録方法が根本的に間違っていたようです。 基本的に私のコードで表示するのImageにあるBLOB型のデータですよね。Accessでリンクを張って登録すると、OLEオブジェクト型のデータとして登録されてしまいます。 で、データ的には存在しているけど、"Image/jpeg"等にもならず、結果「×」ボタンを表示していたようです。 マイクロソフトの技術情報に「Visual C#.NETでADO.NETを使用したBLOBデータの読み取りと書き込みの方法」ってのがありましたので、参考にしてデータを登録したらできました。 http://support.microsoft.com/default.aspx

関連するQ&A

  • ASP.NET C# SQLパラメータ

    いつもお世話になっております。 グリッドビューから編集、更新キャンセルの機能を使っているところなのですが、更新ボタンのイベント(RowUpdating)からだとUpdateCommandに直接SQL文を入れないとうまく行きません。 UpdateCommand = "update .....";のようにです。 SqlConnection cn = new SqlConnection(接続文字列); SqlCommand cmd = new SqlCommand(SQL文, cn); SqlParameter sp1 = cmd.Parameters.Add("@パラメータ", SqlDbType.Int); SqlParameter sp2 = cmd.Parameters.Add("@パラメータ2", SqlDbType.VarChar); sp1.Value = 変数 sp2.Value = 変数 cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); のようにパラメータを使いたいのですが、UpdateCommandに対するパラメータの設定のやり方がわかりません、教えてください!!

  • NULL値をSELECTする

    開発環境  Xp Home Edtion Microsoft Visual C++ 2008 Express Edition Microsoft SQL Server 2005 int i=0; String^ str1; sSqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\test.mdf;Integrated Security=True;User Instance=True");qlConn->Open(); str1= "SELECT NoID FROM Table1 WHERE hentou IS NULL OR nyuryoku IS NULL"; sqlCommand^ sqlCmd=gcnew SqlCommand(str1,sqlConn); SqlDataReader^ exeReader=sqlCmd->ExecuteReader(); while(exeReader->Read()){ gyou[i]=exeReader[""]->ToString(); i++; } sqlConn->Close(); SELECT文でhentou,nyuryokuのどちらか一方でもNULLならばそのNoIDを取り出すということをしたいのですが、 "sqlCommandが定義されていない識別子です。"というエラーが出てきます。 SQL文が間違っていると思うのですがどのようにしたら良いのでしょうか何卒よろしくお願いします。

  • VC++でSELECT文の実行結果を表示

    開発環境は OS XPのHomeEditon Visual C++ ExpressEdition SQL Server 2005 Express です。 よろしくお願いします。 #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <string> using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; char a; void sub( SqlDataReader ^objRd ) { System::Diagnostics::Debug::WriteLine(objRd); while( objRd->Read() ) { System::Diagnostics::Debug::WriteLine(objRd->Read()); } } int main(void){ String^ str; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\TEST.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str = "SELECT * FROM table1"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); sub( exeReader ); sqlConn->Close(); } これの実行結果がboolean形で帰ってくるのですがこれを表内のデータが帰ってくるようにしたいのです。 少し知識不足なところもありますがどうかよろしくお願いします。

  • 文字列変換ついて

    開発環境  XP Home Edtion Microsoft Visual C++ 2008 Express Edition Microsoft SQL Server 2005 Express Edition Visual C++で入力フォームから数字の入力文字列でのInsert文を実行してそのまま反映させることはできたの ですが、日本語やアルファベットが入らないのですがどうしたらよいでしょうか? PSTR strText; String^ data; char *ree; ree=(char*)strText; String^ data; data=gcnew String(ree); SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\test.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str= "INSERT INTO table1 (test) VALUES("+data+")"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); sqlConn->Close(); 何卒よろしくおねがいします。

  • VB.NETでSqlClientを利用して複数テーベルを見る方法

    今VB.NETで SQLデータベースからデータを取得して動作するプログラムを作っているのですが、テーブルを複数参照する方法がわかりません。教えてください~ ■今のプログラム(おおざっぱに) Public DBcn As SqlClient.SqlConnection = Nothing Public SQLcmd As SqlClient.SqlCommand Dim dr As SqlDataReader DBcn = New SqlClient.SqlConnection SQLcmd = New SqlClient.SqlCommand DBcn.ConnectionString = "接続情報省略" DBcn.Open() SQLcmd.Connection = DBcn SQLcmd.CommandText = "select * from AAA " dr = SQLcmd.ExecuteReader() While dr.Read() = True   ※処理A End While このプログラムの処理Aの中に もう一度Select文で他のテーブル(データベース同じ)を参照したいのですが、どのようにすればよいのでしょうか? いろいろ試してみたのですがどれもできず;;困っております。

  • 異なるソリューションの連結について教えてください。

    プログラミング初心者です。 開発環境 OS  XP HomeEdition Visual C++ Express Edition ソリューションAのCPPファイル #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ソリューションBのCPPファイル #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <string> using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; int main(void){ String^ str; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\TEST.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str = "SELECT * FROM table1 "; //str= "INSERT INTO table1 (test) VALUES(3)"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); while( exeReader->Read() ) { System::Diagnostics::Debug::WriteLine(exeReader["test"]->ToString()); } sqlConn->Close(); } です。ソリューション間の連結するのはどうしたらいいですか?

  • ASP.NETからのデータベースの作成

    こんにちは。 SQL SERVER 2005 ExpressとIIS5.0とASP.NET2.0+C#で使っています。 一台のサーバーマシンに、SQL SERVER 2005 ExpressとIIS5.0をインストールした状態なのですが、Webページ上のC#のプログラムよりデータベースを作成しようとすると、 CREATE DATABASE 権限がデータベース 'master' で拒否されました。 と、メッセージが出ます。 要するに権限がないというのはわかるのですが、このようにWebからログインしてきたユーザーに権限を付加することはできるのでしょうか? あるいは、接続文字列かなんかで権限のあるユーザーでログインする、といったことが可能なものでしょうか? 現在は以下のようにして接続、作成を行おうとしています。 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Server=.\\SQLEXPRESS;Integrated security=SSPI"; String strDatabase = "CREATE DATABASE newdatabase"; SqlCommand cmdDatabase = new SqlCommand(strDatabase, conn); conn.Open(); cmdDatabase.ExecuteNonQuery(); conn.Close(); エラーの内容から、SQL SERVERそのものへのアクセスは成功しているように思えます。 よろしくお願いします。

  • Visual Studio 2005 Sql Server 2005 C#

    先輩方 こんばんは カネゴンです。 下記内容で困っています。 SqlConnection がオープンできません。 「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因 sql server」のエラーと 「**」はログインできませんでしたの表示がされ、かれこれ3日悩んでおります。 宜しくお願いします。 SqlConnection cn = new SqlConnection(@" Server = local ; Trusted_Connection = Yes ; Database = user_master ; uid = *** ; pwd = *** ; "); SqlCommand cmd = new SqlCommand("login_check", cn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter p1 = new SqlParameter("@p1",             System.Data.SqlDbType.VarChar, 16); p1.Value = TextBox1.Text; SqlParameter p2 = new SqlParameter("@p2",             System.Data.SqlDbType.VarChar, 16); p2.Value = TextBox2.Text; cn.Open();

  • テキストボックスに文字列を入れる

    開発環境 XP Home Edtion Microsoft Visual C++ 2008 Express Edition Microsoft SQL Server 2003 Express Edition SQL文で1から5までのNoIDを取得してそれをダイアログのテキストボックスIDC_XS1からIDC_XS5の場所に入れようとしています。 int i=1; String^ str; char* dstChar2; LPSTR dstLPSTR2; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\test.mdf;Integrated Security=True;User Instance=True"); while(i<=5){ sqlConn->Open(); str= "SELECT * FROM Table1 WHERE NoID='"+i+"'"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); while(exeReader->Read()){ str=exeReader["nyuryoku"]->ToString(); dstChar2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str); dstLPSTR2 = (LPCSTR)dstChar2; #define IDC_XS IDC_XS##i        //iの内容をIDC_XSに連結させたいのですがなかなかできないのです。 SetDlgItemText(hWnd,IDC_XS,dstLPSTR2); i++; } sqlConn->Close(); どのようにしたらテキストボックス5つの中にSQL文の結果が入るのでしょうか。何卒よろしくおねがいします。

  • 現在、ASP.NET(言語:VB.NET)にて、

    現在、ASP.NET(言語:VB.NET)にて、 データ参照、更新系のWebアプリケーションを自学しているものですが、 DAC(Data Access Componet)を利用してSQL Serverのデータを取得、更新する際、 コネクションの閉じ方が分からず困っています。 DACを使用しない場合は、 下記のようにSQLConnectionをUsing句で明示的に括り、 Closeさせることができますが、 DACを使用した場合はTableAdapterからSQLConnectionを取得できず、 同様の実装方法を採れません。 ------------------ Dim mySelectQuery As String = "SELECT * FROM Categories ORDER BY CategoryID" Dim myConnectString As String = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer" Dim myCommand As New SqlCommand(mySelectQuery) Using conn AS SqlConnection = New SqlConnection(myConnectString) myCommand.Connection =conn myCommand.CommandTimeout = 15 myCommand.CommandType = CommandType.Text myCommand.ExecuteNonQuery() End Using ------------------ 一方、DACを使用した場合は下記のように実装しております。 ------------------ Dim ta As New SystemError_OriginalTableAdapters.OriginalTableAdapter Dim dt As New SystemError_OriginalDataTable ta.FillBy(dt, id) ' テーブルアダプターのFillメソッドを呼び出すのみで、Closeしているかどうかがわからない。 ------------------ DACでは、Fillメソッド実行後に必ずSQLConnectionがCloseされることが 保証されているなら問題は無いのですが、 そうでない場合、テーブルアダプターからSQLConnectionを取得して、 明示的にCloseさせてやりたいと思っています。 DACを使用した場合のSQLConnectionの取得方法、 もしくはSQLConnectionのCloseの方法についてご教授願えないでしょうか? 以上、宜しくお願いします。

専門家に質問してみよう