C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[17]: CSVデータをクライアントからインポート


(過去ログ 16 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■5644 / inTopicNo.1)  CSVデータをクライアントからインポート
  
□投稿者/ なぞなぞ (12回)-(2007/07/19(Thu) 13:46:55)

分類:[ASP.NET (C#)] 

2007/07/19(Thu) 18:37:17 編集(投稿者)
ご教授お願い致します。

ASP.NET1.1 C#です。
初心者ですが学習しています。

CSVデータをデータベースにインポートするものを作成しました。
サーバから試す場合、成功し、クライアントから試すと、うまく入りません。
要点箇所コードのみ張らせていただきます。多少削除したのですがミスがなければサーバからは成功するはずです。
クライアントから試す場合、ファイルをC:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName)のパスまで移動させる
箇所までは出来ています。が、サーバのパスでこの場所を見るはずなのに失敗してしまいます。
ご教授お願いいただけますでしょうか。
あと、このコードだとサーバからでも、C直下などにデータがないと成功しません。おそらく間に日本語があると入らないものと思えます。
パスに日本語など混ざっても入れる方法も合わせてお願いできますでしょうか。いろいろ調べましたが分かりませんでした。
お願い致します。


			try
			{
				HttpPostedFile posted; 
				posted= Request.Files["upfile"];//ファイルパス

				if (posted.FileName != "")
				{
					posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
				}
				else
				{
					return;
				}

				if (!File.Exists(posted.FileName)) return ;  // ファイルの有無チェック


				StreamReader reader = new StreamReader(Server.MapPath("upload/")+System.IO.Path.GetFileName(posted.FileName));
			
				string oneG ;
				
				int i = 0;
			
				while ((oneG = reader.ReadLine()) != null)
                  {
				
					string[] Array = oneG.Split(',');

					SqlConnection objDb = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnection"]);
					SqlCommand objCom = new SqlCommand("INSERT INTO tb_test(i_yn,i_ynk) VALUES(@i_yn,@i_ynk)",objDb);

					objCom.Parameters.Add("@item",Array[0]);
					objCom.Parameters.Add("@i_yn",Array[1]);

					
					objDb.Open();
					objCom.ExecuteNonQuery();
					
					objDb.Close();
				}
				reader.Close() ;
	
			}
			catch(Exception ex)
			{

			}

引用返信 編集キー/
■5645 / inTopicNo.2)  Re[1]: CSVデータをクライアントからインポート
□投稿者/ ちゃっぴ (52回)-(2007/07/19(Thu) 14:12:20)
ちゃっぴ さんの Web サイト
その CSV は Web で公開する必要がありますか?

DB に取り込むための一次保管場所でしょうから Web で公開されない directory へ保管しましょう。
引用返信 編集キー/
■5657 / inTopicNo.3)  Re[1]: CSVデータをクライアントからインポート
□投稿者/ mあ (22回)-(2007/07/19(Thu) 17:24:46)
このASPはサーバーのどこにありますか?
アドレスバーにどのように打ったら、この画面が出てくるのか、です。
参考:http://www.pokopeko.net/plog/ViewForm.aspx?CATNO=2&SEQNO=9

(1)
webroot/
   |-TEST.ASPX
   |-upload/
       |-xxx.csv
(2)
webroot/
   |-testapp/
   |   |-TEST.ASPX
   |-upload/
   |   |-xxx.csv
(3)
webroot/
   |-testapp/
   |   |-TEST.ASPX
   |   |-upload/
   |   |   |-xxx.csv

Server.MapPath(".")
と
Server.MapPath("/")
と
Server.MapPath("../")
と
Server.MapPath("./")
の返す文字列の違いを見てみると良いかもしれませんね。




引用返信 編集キー/
■5660 / inTopicNo.4)  Re[2]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (14回)-(2007/07/19(Thu) 18:35:01)
No5657 (mあ さん) に返信
> このASPはサーバーのどこにありますか?
> アドレスバーにどのように打ったら、この画面が出てくるのか、です。
> 参考:http://www.pokopeko.net/plog/ViewForm.aspx?CATNO=2&SEQNO=9
> 
> (1)
> webroot/
>    |-TEST.ASPX
>    |-upload/
>        |-xxx.csv
> (2)
> webroot/
>    |-testapp/
>    |   |-TEST.ASPX
>    |-upload/
>    |   |-xxx.csv
> (3)
> webroot/
>    |-testapp/
>    |   |-TEST.ASPX
>    |   |-upload/
>    |   |   |-xxx.csv
> 
> Server.MapPath(".")
> と
> Server.MapPath("/")
> と
> Server.MapPath("../")
> と
> Server.MapPath("./")
> の返す文字列の違いを見てみると良いかもしれませんね。
> 
返信ありがとう御座います
Server.MapPathで返すパスはサーバからは入れることが出来ているので
あっているはずです

引用返信 編集キー/
■5678 / inTopicNo.5)  Re[3]: CSVデータをクライアントからインポート
□投稿者/ mあ (24回)-(2007/07/20(Fri) 10:49:28)
No5660 (なぞなぞ さん) に返信

> 返信ありがとう御座います
> Server.MapPathで返すパスはサーバからは入れることが出来ているので
> あっているはずです
??
StreamReader reader = new StreamReader(
Server.MapPath("upload/") +
System.IO.Path.GetFileName(posted.FileName));
# 長いので適当に改行入れました。

ここで躓いているのですよね?

Server.MapPath("upload/") +
これが本当に期待するパスを返しているのか確認した方がよくないですか?

 "C:\\Inetpub\\wwwroot\\upload\\"+
これが期待値ですよね?

とりあえず、怪しいところ全てを1つずつ潰して黒の疑いを白にしていく
しか手はありませんよ。

# 申し訳ないのですが、質問には、これで試せると書いてありますが、環境
# 持ってないので試していません。質問の内容から、怪しいところを指摘し
# ているだけです。

とりあえず、CSV ファイルオープン部分から下を全部削除して、
StreamWriter sw = new StreamWriter("C:\\result.txt");
sw.WriteLine(Server.MapPath("upload/"));
sw.WriteLine(Server.MapPath("./upload/"));
sw.WriteLine(Server.MapPath("/upload/"));
sw.WriteLine(Server.MapPath("../upload/"));
sw.Close();
をやってみたらどーですかね。
何も見えてこないかもしれないし、なにか見えてくるかもしれません。

# あいつ、いい加減なことばかりほざきやがって・・・
# と思うかもしれませんし、なんだ、そーゆーことか、
# と安堵するかもしれません。


引用返信 編集キー/
■5681 / inTopicNo.6)  Re[4]: CSVデータをクライアントからインポート
□投稿者/ ちゃっぴ (53回)-(2007/07/20(Fri) 13:12:51)
ちゃっぴ さんの Web サイト
というか、debug 時くらいは、例外握りつぶすのやめましょう。
引用返信 編集キー/
■5682 / inTopicNo.7)  Re[4]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (15回)-(2007/07/20(Fri) 13:39:09)
No5678 (mあ さん) に返信
> ■No5660 (なぞなぞ さん) に返信
> 
>>返信ありがとう御座います
>>Server.MapPathで返すパスはサーバからは入れることが出来ているので
>>あっているはずです
> ??
> StreamReader reader = new StreamReader(
>   Server.MapPath("upload/") + 
>   System.IO.Path.GetFileName(posted.FileName));
> # 長いので適当に改行入れました。
> 
> ここで躓いているのですよね?
> 
>   Server.MapPath("upload/") + 
> これが本当に期待するパスを返しているのか確認した方がよくないですか?
> 
>  "C:\\Inetpub\\wwwroot\\upload\\"+
> これが期待値ですよね?
> 
> とりあえず、怪しいところ全てを1つずつ潰して黒の疑いを白にしていく
> しか手はありませんよ。
> 
> # 申し訳ないのですが、質問には、これで試せると書いてありますが、環境
> # 持ってないので試していません。質問の内容から、怪しいところを指摘し
> # ているだけです。
> 
> とりあえず、CSV ファイルオープン部分から下を全部削除して、
> StreamWriter sw = new StreamWriter("C:\\result.txt");
> sw.WriteLine(Server.MapPath("upload/"));
> sw.WriteLine(Server.MapPath("./upload/"));
> sw.WriteLine(Server.MapPath("/upload/"));
> sw.WriteLine(Server.MapPath("../upload/"));
> sw.Close();
> をやってみたらどーですかね。
> 何も見えてこないかもしれないし、なにか見えてくるかもしれません。
> 
> # あいつ、いい加減なことばかりほざきやがって・・・
> # と思うかもしれませんし、なんだ、そーゆーことか、
> # と安堵するかもしれません。

ありがとうございます。ですが、そこでは何度も言いますが躓いてはいないと思うんです。
あと
> sw.WriteLine(Server.MapPath("upload/"));
> sw.WriteLine(Server.MapPath("./upload/"));
> sw.WriteLine(Server.MapPath("/upload/"));
> sw.WriteLine(Server.MapPath("../upload/"));
は試しました。
パスはあっています。なのでサーバコンピュータからの場合成功すると思うんです。
まず
				if (posted.FileName != "")
				{
					posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
				}
				else
				{
					return;
				}
でこのフォルダにファイルをいれてこのフォルダからインポートデータファイルを見ているので、このパスがあっていなければサーバからも
入れることは出来ないはずです。
なので質問させていただいています。
お願い致します

引用返信 編集キー/
■5683 / inTopicNo.8)  Re[5]: CSVデータをクライアントからインポート
□投稿者/ HiJun (56回)-(2007/07/20(Fri) 14:15:33)
CSVの書込みが
サーバ(同一PC)の場合・・・OK
他のPCの場合 ・・・NG
ということですよね。

だったら、指定フォルダの権限だけではないでしょうか。
引用返信 編集キー/
■5684 / inTopicNo.9)  Re[6]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (16回)-(2007/07/20(Fri) 15:35:24)
2007/07/20(Fri) 15:35:50 編集(投稿者)
No5683 (HiJun さん) に返信
> CSVの書込みが
> サーバ(同一PC)の場合・・・OK
> 他のPCの場合          ・・・NG
> ということですよね。
> 
> だったら、指定フォルダの権限だけではないでしょうか。

フォルダに権限は入っています。試しにクライアントから落としたデータの権限を見ましたが、サーバからと同じ権限が入っていました。

原因が違うことが分かりました。
一番初めのデータに
			try
			{
				HttpPostedFile posted; 
				posted= Request.Files["upfile"];//ファイルパス

				if (posted.FileName != "")
				{
					posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
				}
				else
				{
					return;
				}

				if (!File.Exists(posted.FileName)) return ;  // ファイルの有無チェック


				StreamReader reader = new StreamReader(Server.MapPath("upload/")+System.IO.Path.GetFileName(posted.FileName));
			
				string oneG ;
				
				int i = 0;
			
				while ((oneG = reader.ReadLine()) != null)
                  {
				
					string[] Array = oneG.Split(',');

					SqlConnection objDb = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnection"]);
					SqlCommand objCom = new SqlCommand("INSERT INTO tb_test(i_yn,i_ynk) VALUES(@i_yn,@i_ynk)",objDb);

					objCom.Parameters.Add("@item",Array[0]);
					objCom.Parameters.Add("@i_yn",Array[1]);

					
					objDb.Open();
					objCom.ExecuteNonQuery();
					
					objDb.Close();
				}
				reader.Close() ;
                  Response.Write("<script language=javascript>alert('ああ');</script>");

	
			}
			catch(Exception ex)
			{
                Response.Write("<script language=javascript>alert('あ');</script>");

			}
とResponse.Write("<script language=javascript>alert('あ');</script>");
などを入れてみました。
実行するとサーバでは成功も失敗もどちらも、あ、ああ、のどちらかが表示されます。
ですが、、、、、、クライアントからだとボタンを押しても、データはサーバのフォルダにはいきますが、あ、ああといずれも出力されず、
どうなっているのか分からなくなりました。
ちなみにページロードなどにResponse.Write("<script language=javascript>alert('あ');</script>");
をおけばクライアントでも表示されます。
javascriptが無効になっているわけではありません。

何が原因かすらまったく分からなくなりました。

ご教授お願いできますでしょうか

引用返信 編集キー/
■5691 / inTopicNo.10)  Re[7]: CSVデータをクライアントからインポート
□投稿者/ HiJun (57回)-(2007/07/20(Fri) 17:42:17)
というのであれば、
> posted= Request.Files["upfile"];//ファイルパス
> if (posted.FileName != "")
> {
>	posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
> }
> else
> {
>	return;
> }
ここでファイル名が取れていないということですよね。

その前の処理でRequest.Filesをクリアしているとか
ありませんか?

引用返信 編集キー/
■5694 / inTopicNo.11)  Re[8]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (18回)-(2007/07/20(Fri) 18:20:45)
No5691 (HiJun さん) に返信
> というのであれば、
>>posted= Request.Files["upfile"];//ファイルパス
>>if (posted.FileName != "")
>>{
> > posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
>>}
>>else
>>{
> > return;
>>}
> ここでファイル名が取れていないということですよね。
>
> その前の処理でRequest.Filesをクリアしているとか
> ありませんか?
返事ありがとう御座います。
ファイル名は取れています。なのでそのフォルダにファイルが来てます。
そこでファイル名が取れずにreturnになっているなら話はわかるんですがまだ。
ファイルはちゃんと取れているので困っています。

お願い致します。
引用返信 編集キー/
■5695 / inTopicNo.12)  Re[9]: CSVデータをクライアントからインポート
□投稿者/ 中博俊 (1123回)-(2007/07/20(Fri) 19:29:24)
中博俊 さんの Web サイト
何が起きてるの?例外?
例外なら、エラーメッセージ、クラス名、スタックトレース提出汁。
引用返信 編集キー/
■5708 / inTopicNo.13)  Re[10]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (20回)-(2007/07/21(Sat) 00:48:59)
No5695 (中博俊 さん) に返信
> 何が起きてるの?例外?
> 例外なら、エラーメッセージ、クラス名、スタックトレース提出汁。

例外が何も出ません。ボタンを押してもリロードが起こってるだけで何も変化なしです。
サーバにファイルがいってるだけです。
引用返信 編集キー/
■5711 / inTopicNo.14)  Re[11]: CSVデータをクライアントからインポート
□投稿者/ 中博俊 (1126回)-(2007/07/21(Sat) 09:46:51)
中博俊 さんの Web サイト
catch(Exception ex)
{

}


こんなことしてるからでしょ?

posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
あとこれ戻り値はないの? }

引用返信 編集キー/
■5753 / inTopicNo.15)  Re[12]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (22回)-(2007/07/23(Mon) 00:14:35)
No5711 (中博俊 さん) に返信
> catch(Exception ex)
> {
>
> }
>
>
> こんなことしてるからでしょ?
>
> posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
> あとこれ戻り値はないの? }

catchはいけないんですか??
具体的に教えていただけますでしょうか。申し訳ありません。
引用返信 編集キー/
■5759 / inTopicNo.16)  Re[13]: CSVデータをクライアントからインポート
□投稿者/ mあ (29回)-(2007/07/23(Mon) 11:05:26)
No5753 (なぞなぞ さん) に返信
> ■No5711 (中博俊 さん) に返信
>>catch(Exception ex)
>> {
>>
>> }
>>
>>
>>こんなことしてるからでしょ?
>>
>>posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
>>あとこれ戻り値はないの? }

SaveAs
http://msdn2.microsoft.com/ja-jp/library/system.web.httppostedfile.saveas(VS.80).aspx
戻り値無いですね。けど、HttpException ナゲ

GetFileName
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemiopathclassgetfilenametopic.asp
戻り値は文字列。ArgumentException ナゲ

>
> catchはいけないんですか??
> 具体的に教えていただけますでしょうか。申し訳ありません。

自分で調べられる範囲内の問題は皆敢えて触れないところがあるのかもしれません。
ここで書いちゃうより、自分で調べて納得した方が忘れにくいというのもあるのかも。

上に書いた「ナゲ」の例外を捕らえる部分で自分自身で握りつぶしていることを
No5681 で指摘されていますね。

握りつぶす
http://dictionary.www.infoseek.co.jp/?ii=0&lp=0&sm=1&sc=1&gr=ml&qt=%B0%AE%A4%EA%C4%D9%A4%B9&sv=KO&se=on

隠蔽する
http://dictionary.www.infoseek.co.jp/?spa=1&sc=1&se=on&lp=0&gr=ml&qt=%B1%A3%CA%C3&sm=1&sv=KO


引用返信 編集キー/
■5763 / inTopicNo.17)  Re[14]: CSVデータをクライアントからインポート
□投稿者/ Jitta (375回)-(2007/07/23(Mon) 12:01:55)
あっている「はず」とか、不確定なら確かめればいいのに。

どうして、保存の時はフルパス指定なのに、開くときは MapPath を使うのかな?
作ったものをそのまま再利用すれば、そもそも問題になる箇所が減りますよね?

NO5678 を、もう一度…あと5回、読み返せば、解決すると思います。「はず」が「恥」に変わるかもしれないけど。とにかく、一度止めて、な〜にが返ってくるのかな?確認しましょう。
引用返信 編集キー/
■5766 / inTopicNo.18)  Re[15]: CSVデータをクライアントからインポート
□投稿者/ Jitta (376回)-(2007/07/23(Mon) 12:09:15)
No5763 (Jitta ) に返信
あ〜っと、ごめん。これは、アプリケーションの作り方が関係しています。
普通に作れば、「はず」が間違っているはず。
ディレクトリ構成を、よく確認しましょう。
NO5657 も、やってみること。やってみることは、とても重要です。
引用返信 編集キー/
■5774 / inTopicNo.19)  Re[16]: CSVデータをクライアントからインポート
□投稿者/ なぞなぞ (23回)-(2007/07/23(Mon) 15:33:59)
No5766 (Jitta さん) に返信
> ■No5763 (Jitta ) に返信
> あ〜っと、ごめん。これは、アプリケーションの作り方が関係しています。
> 普通に作れば、「はず」が間違っているはず。
> ディレクトリ構成を、よく確認しましょう。
> NO5657 も、やってみること。やってみることは、とても重要です。
「恥」という言葉に打ちひしがれました。ありがとうございました
解決済み
引用返信 編集キー/
■5775 / inTopicNo.20)  Re[7]: CSVデータをクライアントからインポート
 
□投稿者/ eternia (7回)-(2007/07/23(Mon) 15:40:41)
No5684 (なぞなぞ さん) に返信
> 実行するとサーバでは成功も失敗もどちらも、あ、ああ、のどちらかが表示されます。
> ですが、、、、、、クライアントからだとボタンを押しても、データはサーバのフォルダにはいきますが、あ、ああといずれも出力されず、
> どうなっているのか分からなくなりました。

javascriptを出力しているところまで到達してないってことですよね。
コードをよく見てください。処理を抜ける箇所があります。
そこで躓いてるってことです。

if (posted.FileName != "")
{
	posted.SaveAs("C:\\Inetpub\\wwwroot\\upload\\"+ System.IO.Path.GetFileName(posted.FileName));
}
else
{
	return;   ←@
}

if (!File.Exists(posted.FileName)) return ;  // ファイルの有無チェック  ←A

@、Aのどちらかですよね。

>ファイル名は取れています。なのでそのフォルダにファイルが来てます。
これはどーやって確認しましたか?

#Jittaさんも仰られていますが「〜だと思う」「〜なはず」等
#自分の思い込みで作業するのは危険です。
#せっかく回答を頂いているのですから一蹴せずにとりあえずやってみたほうがいいですよ。

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -