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

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

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

Re[3]: C# Postgre URL、リストボックスへ


(過去ログ 113 を表示中)

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

■66703 / inTopicNo.1)  C# Postgre URL、リストボックスへ格納、表示
  
□投稿者/ 外山 弘 (1回)-(2013/05/17(Fri) 20:30:45)

分類:[.NET 全般] 

環境:C# PostgreSQL FrameWork4.0

リストボックス C# PostgreSQL

いままで知恵袋などで部分的な質問をしてきましたが、完成図を作った上で質問した方がより早く正解に近づけると思い、この度完成図の資料を作成して、質問させて頂いております。

エクセルのイメージ図がありますので以下からご覧下さい。
http://yahoo.jp/box/sWh-1i

以下が途中まで作成したコードです。
http://yahoo.jp/box/MP1Pqh

1、概要
まず、yahooニュースの記事のURLをリストボックスへ仕分けして入れます。(マウスドラッグ)。
(芸能なら1、ITなら2、経済なら3という具合です。)
画面はWebBrouzerコントロールを使用。
すると、リストボックスに入ったURLがDBへ全て格納される。
格納された後はそのURLへアクセスし画面表示されるようにする。

・格納のされ方
リストボックスは6つあり、格納ボタンが一つある。
格納ボタンを押すとリストボックス1から順にURLがDBに格納される。
その後、リストボックス2、3、4、5と順に格納されるように作りたい。
リストボックス1に入ったものはテーブルA、2はテーブルB、3はテーブルC、4はテーブルD、5はテーブルEへ格納されるようにしたいです。

DBに格納された後は、格納された順にURLが読み込まれて、一定の間隔で画面に表示されるようにする。

「1、概要」で操作して入れているURLはリストボックスZにコピーが格納される。

上記の続きになりますが、以下のようなプログラムを作りたいと思っています。


エクセル表にあるように、6個のリストボックスにURLをランダムにドラッグして入れます。

そして、格納ボタンを押す。

すると、dispテーブル(DB)にURLが入り、画面表示がスタートする。

6個のリストボックスにそれぞれ入っているURLに1つ1つアクセスして表示しては次の表示(表示とは1つのニュースのURLにアクセスして、そのニュースのページを開くという意味です)に移り、全体的な順序としてはリストボックス1→リストボックス2→リストボックス3→リストボックス4→リストボックス5→リストボックス6とします。

全てのURLへのアクセス及び表示が終わったらストップする。

この様なプログラムを作りたいと思っています。
まずリストボックスへ格納、その後表示という具合です。

修正すべき点は多くあると思いますが、そもそもぜんぜん違うのであれば、はっきりご指摘頂けると嬉しいです。

さまざまなご回答お待ちしております。
宜しくお願い致します。
引用返信 編集キー/
■66705 / inTopicNo.2)  Re[1]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ επιστημη (47回)-(2013/05/17(Fri) 22:46:24)
επιστημη さんの Web サイト
> さまざまなご回答お待ちしております。

回答って...質問らしき箇所が見当たらんのですが。

引用返信 編集キー/
■66707 / inTopicNo.3)  Re[2]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (1回)-(2013/05/18(Sat) 06:22:18)
No66705 (επιστημη さん) に返信
>>さまざまなご回答お待ちしております。
>
> 回答って...質問らしき箇所が見当たらんのですが。
>
◆記事編集を有効にしていなかったので、以下を修正致します。

分類が「.NET 全般」となっていますが、「C#」になります。

>「1、概要」で操作して入れているURLはリストボックスZにコピーが格納される。
とありますが、こちらは無しとします。

>6個のリストボックスにそれぞれ入っているURLに1つ1つアクセスして表示しては…
こちらは6個ではなく5個です。

わからない部分はいつくかあるのですが、まず一つ質問を記載させて頂きます。
【1】現状ですと、リストボックス1、2、3、4、5、に入ったURLは「item_data」テーブルにまとめて格納されるようになっております。
これを、リストボックス1は「item_data」、リストボックス2は「item_data2」、リストボックス3は「item_data3」に格納(同じように4、5)としたいです。

これをやるには以下の記述をリストボックスの数(5回)だけ書かないとならないのでしょうか?
どのように書いてあげれば【1】を実現できるでしょうか?
他にもおかしな点あると思いますので指摘して頂ければと思います。
初歩的な質問ですいませんがどうぞ宜しくお願い致します。

-----------------------------------------------------
String connStr = "Server=127.0.0.1;Port=5432;User Id=postgres;Password=xxxxxxxx;Database=xxxxxxxx";
String sql = "INSERT INTO ITEM_DATA (url1) VALUES(@url1)";
@url1 = lb.Text;

using (NpgsqlConnection conn = new NpgsqlConnection(connStr))
{
using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
{
NpgsqlParameter parm;
parm = new NpgsqlParameter("@url1", NpgsqlDbType.Varchar);
parm.Value = url1;
cmd.Parameters.Add(parm);
//parm = new NpgsqlParameter("@name", NpgsqlDbType.Varchar);
//parm.Value = name;
//cmd.Parameters.Add(parm);
// NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=xxxxxxxx;Database=xxxxxxxx;");
try
{
conn.Open();

int count = cmd.ExecuteNonQuery();
if (count > 0)
{
MessageBox.Show(count.ToString() + "件登録しました。");

listBox1.Text = "";
}
NpgsqlCommand com = new NpgsqlCommand("SELECT * FROM item_data", conn);
NpgsqlDataReader reader = com.ExecuteReader();

//Console.WriteLine("{0}\t");

// 1 行ずつ読み込む
//while (reader.Read())
//{
// 列の分だけ表示
//for (int i = 0; i < reader.FieldCount; ++i)
//{
// Console.WriteLine("{0}\t", reader[i]);
//}
//}
}
catch (Exception m)
{
Console.WriteLine(m.ToString());
}
finally
{
conn.Close();
}

}
}
--------------------------------------------------------------
引用返信 編集キー/
■66713 / inTopicNo.4)  Re[3]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ επιστημη (48回)-(2013/05/18(Sat) 17:14:01)
επιστημη さんの Web サイト
> 【1】現状ですと、リストボックス1、2、3、4、5、に入ったURLは「item_data」テーブルにまとめて格納されるようになっております。
> これを、リストボックス1は「item_data」、リストボックス2は「item_data2」、リストボックス3は「item_data3」に格納(同じように4、5)としたいです。
>
> これをやるには以下の記述をリストボックスの数(5回)だけ書かないとならないのでしょうか?

配列使えばいいんじゃなくて?

item_data[i] でアクセスできればいいんでしょ?

引用返信 編集キー/
■66722 / inTopicNo.5)  Re[4]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (2回)-(2013/05/19(Sun) 16:42:53)
No66713 (επιστημη さん) に返信
>>【1】現状ですと、リストボックス1、2、3、4、5、に入ったURLは「item_data」テーブルにまとめて格納されるようになっております。
>>これを、リストボックス1は「item_data」、リストボックス2は「item_data2」、リストボックス3は「item_data3」に格納(同じように4、5)としたいです。
>>
>>これをやるには以下の記述をリストボックスの数(5回)だけ書かないとならないのでしょうか?
>
> 配列使えばいいんじゃなくて?
>
> item_data[i] でアクセスできればいいんでしょ?
>
ありがとうございます。
テーブルも5個用意してそれぞれにインサートすることになるのですが、
item_data[i]
だけですとちょとまだイメージがわかないのですが、どの部分を書き換えたらいいのでしょうか?
宜しくお願い致します。
引用返信 編集キー/
■66723 / inTopicNo.6)  Re[5]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ επιστημη (49回)-(2013/05/19(Sun) 19:54:12)
επιστημη さんの Web サイト
> >>これを、リストボックス1は「item_data」、リストボックス2は「item_data2」、リストボックス3は「item_data3」に格納(同じように4、5)としたいです。

なんだから リストボックスとitem_dataをそれぞれ listBox[],item_data[] として

for ( int i = 0; i < 5; ++i ) {
  listBox[i] は item_data[i] に格納
}

とすればいんじゃなくて?


引用返信 編集キー/
■66724 / inTopicNo.7)  Re[6]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (1回)-(2013/05/20(Mon) 06:58:59)
PostgreSQL は所有していないので
SQLServer にて検証。

データベース名:test
テーブル名:data1 〜 data5

>>DBに格納された後は、格納された順にURLが読み込まれて、一定の間隔で画面に表示されるようにする。
については、リストボックスの値を順次取得しつつページの読み込みが完了するまで
値の取得を止めておく手段がわからないので、あくまでリストボックスの値を
データベースに入れていく部分のみに限定。

using System.Data.SqlClient;

namespace FormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {

            for (int i = 1; i <= 5; i++)
            {
                (Controls["listBox" + i] as ListBox).AllowDrop = true;
                (Controls["listBox" +i ] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
                (Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
            }
        }

        private void listBox_DragEnter(object sender, DragEventArgs e)
        {
            //URLのみ受け入れる//@ITより
            if (e.Data.GetDataPresent("UniformResourceLocator"))
                e.Effect = DragDropEffects.Link;
            else
                e.Effect = DragDropEffects.None;
        }

        private void listBox_DragDrop(object sender, DragEventArgs e)
        {
            //ドロップされたリンクのURLを取得する//@ITより
            String url = e.Data.GetData(DataFormats.Text).ToString();
            //結果を表示
            ((ListBox)sender).Text = url;
            //MessageBox.Show(url);
            //ドロップされたデータがString型か調べる
            if (e.Data.GetDataPresent(typeof(String)))
            {
                ListBox target = (ListBox)sender;
                //ドロップされたデータ(String型)を取得
                String itemText =
                    (String)e.Data.GetData(typeof(String));
                //ドロップされたデータをリストボックスに追加する
                target.Items.Add(url);
                //MessageBox.Show("表示");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

            SqlCommand scm;
            SqlConnection scn = new SqlConnection("Data Source=." + @"\SQLEXPRESS;AttachDbFilename=D:\SQLServer\test.mdf;" +
                                                  "Integrated Security=True;Connect Timeout=30;User Instance=True");
            String sql;
            SqlParameter sParam;
            scn.Open();


            for (int i = 1; i <= 5; i++)
            {
                 if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
                 {
                     sql = string.Format("INSERT INTO data{0} VALUES(@url)",i);
                     scm = new SqlCommand(sql, scn);
                     sParam = new SqlParameter("@url", SqlDbType.NChar);
                     
                   for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
                   {

                       String url1 =(string)(Controls["listBox" + i] as ListBox).Items[m];
                       sParam.Value = url1;
                       scm.Parameters.Clear();
                       scm.Parameters.Add(sParam);
                       scm.ExecuteNonQuery();
                   }
                 }
            }

            //SqlDataReader srd;
            //sql = ("Select * From data1");
            //scm = new SqlCommand(sql, scn);
            //srd = scm.ExecuteReader();

            //while (srd.Read())
            //{
            //  MessageBox.Show(srd.GetString(0));
            //} 
            scn.Close();
        }
    }
}

C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
至らぬ点はあると思いますが、何か手がかりになれば幸いです。

引用返信 編集キー/
■66737 / inTopicNo.8)  Re[7]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (3回)-(2013/05/21(Tue) 02:08:59)
No66724 (こりんご さん) に返信
> PostgreSQL は所有していないので
> SQLServer にて検証。
>
> データベース名:test
> テーブル名:data1 〜 data5
>
> >>DBに格納された後は、格納された順にURLが読み込まれて、一定の間隔で画面に表示されるようにする。
> については、リストボックスの値を順次取得しつつページの読み込みが完了するまで
> 値の取得を止めておく手段がわからないので、あくまでリストボックスの値を
> データベースに入れていく部分のみに限定。
>
> using System.Data.SqlClient;
>
> namespace FormsApplication1
> {
> public partial class Form1 : Form
> {
> public Form1()
> {
> InitializeComponent();
> }
>
> private void Form1_Load(object sender, EventArgs e)
> {
>
> for (int i = 1; i <= 5; i++)
> {
> (Controls["listBox" + i] as ListBox).AllowDrop = true;
> (Controls["listBox" +i ] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
> (Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
> }
> }
>
> private void listBox_DragEnter(object sender, DragEventArgs e)
> {
> //URLのみ受け入れる//@ITより
> if (e.Data.GetDataPresent("UniformResourceLocator"))
> e.Effect = DragDropEffects.Link;
> else
> e.Effect = DragDropEffects.None;
> }
>
> private void listBox_DragDrop(object sender, DragEventArgs e)
> {
> //ドロップされたリンクのURLを取得する//@ITより
> String url = e.Data.GetData(DataFormats.Text).ToString();
> //結果を表示
> ((ListBox)sender).Text = url;
> //MessageBox.Show(url);
> //ドロップされたデータがString型か調べる
> if (e.Data.GetDataPresent(typeof(String)))
> {
> ListBox target = (ListBox)sender;
> //ドロップされたデータ(String型)を取得
> String itemText =
> (String)e.Data.GetData(typeof(String));
> //ドロップされたデータをリストボックスに追加する
> target.Items.Add(url);
> //MessageBox.Show("表示");
> }
> }
>
> private void button1_Click(object sender, EventArgs e)
> {
>
> SqlCommand scm;
> SqlConnection scn = new SqlConnection("Data Source=." + @"\SQLEXPRESS;AttachDbFilename=D:\SQLServer\test.mdf;" +
> "Integrated Security=True;Connect Timeout=30;User Instance=True");
> String sql;
> SqlParameter sParam;
> scn.Open();
>
>
> for (int i = 1; i <= 5; i++)
> {
> if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
> {
> sql = string.Format("INSERT INTO data{0} VALUES(@url)",i);
> scm = new SqlCommand(sql, scn);
> sParam = new SqlParameter("@url", SqlDbType.NChar);
>
> for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
> {
>
> String url1 =(string)(Controls["listBox" + i] as ListBox).Items[m];
> sParam.Value = url1;
> scm.Parameters.Clear();
> scm.Parameters.Add(sParam);
> scm.ExecuteNonQuery();
> }
> }
> }
>
> //SqlDataReader srd;
> //sql = ("Select * From data1");
> //scm = new SqlCommand(sql, scn);
> //srd = scm.ExecuteReader();
>
> //while (srd.Read())
> //{
> // MessageBox.Show(srd.GetString(0));
> //}
> scn.Close();
> }
> }
> }
>
> C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
> 至らぬ点はあると思いますが、何か手がかりになれば幸いです。

ありがとうございます!
明日やってみます。
引用返信 編集キー/
■66742 / inTopicNo.9)  Re[8]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (4回)-(2013/05/21(Tue) 23:00:12)
>>C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
>>至らぬ点はあると思いますが、何か手がかりになれば幸いです。
>
> ありがとうございます!
> 明日やってみます。

こりんご さんから頂いた回答をPosgreSQLバージョンに書き換えてみました。
----------------------------------------------------
scm.Parameters.Add(sParam);
89行目のところで以下のエラーとなりました。
誰か解決方法がわかる方おりませんでしょうか?
---------------------------------------------
<エラー内容>
NpgsqlParameterへ System.Data.SqlClient.SqlParameter を割り当てることができません

数字からキャストするとき、値は無限大より小さい数でなければなりません。
元の型が目的の型と互換性があることを確認します。
この例外に関する一般的なヘルプを参照します。
------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
using System.Data.SqlClient;

namespace urlindex_koringo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i <= 5; i++)
{
(Controls["listBox" + i] as ListBox).AllowDrop = true;
(Controls["listBox" + i] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
(Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
}
}

private void listBox_DragEnter(object sender, DragEventArgs e)
{
//URLのみ受け入れる//@ITより
if (e.Data.GetDataPresent("UniformResourceLocator"))
e.Effect = DragDropEffects.Link;
else
e.Effect = DragDropEffects.None;
}

private void listBox_DragDrop(object sender, DragEventArgs e)
{
//ドロップされたリンクのURLを取得する//@ITより
String url = e.Data.GetData(DataFormats.Text).ToString();
//結果を表示
((ListBox)sender).Text = url;
//MessageBox.Show(url);
//ドロップされたデータがString型か調べる
if (e.Data.GetDataPresent(typeof(String)))
{
ListBox target = (ListBox)sender;
//ドロップされたデータ(String型)を取得
String itemText =
(String)e.Data.GetData(typeof(String));
//ドロップされたデータをリストボックスに追加する
target.Items.Add(url);
//MessageBox.Show("表示");
}
}
//private void button1_Click(object sender, EventArgs e)
//{
//}

private void button1_Click_1(object sender, EventArgs e)
{
NpgsqlCommand scm;
String connStr = "Server=127.0.0.1;Port=5432;User Id=postgres;Password=xxxxxxxx;Database=xxxxxxxx";

//接続を開く
NpgsqlConnection conn = new NpgsqlConnection(connStr);
String sql;
SqlParameter sParam;
conn.Open();


for (int i = 1; i <= 5; i++)
{
if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
{
sql = string.Format("INSERT INTO data{0} VALUES(@url)", i);
scm = new NpgsqlCommand(sql, conn);
sParam = new SqlParameter("@url", SqlDbType.NChar);

for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
{

String url1 = (string)(Controls["listBox" + i] as ListBox).Items[m];
sParam.Value = url1;
scm.Parameters.Clear();
scm.Parameters.Add(sParam);
scm.ExecuteNonQuery();
}
}
}
//SqlDataReader srd;
//sql = ("Select * From data1");
//scm = new SqlCommand(sql, scn);
//srd = scm.ExecuteReader();

//while (srd.Read())
//{
// MessageBox.Show(srd.GetString(0));
//}
conn.Close();
}
}
}

引用返信 編集キー/
■66745 / inTopicNo.10)  Re[9]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (2回)-(2013/05/22(Wed) 07:41:52)
2013/05/22(Wed) 09:25:25 編集(投稿者)
2013/05/22(Wed) 09:24:49 編集(投稿者)

No66742 (?O?R ?O さん) に返信
> >>C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
> >>至らぬ点はあると思いますが、何か手がかりになれば幸いです。
>>
>>ありがとうございます!
>>明日やってみます。
>
> こりんご さんから頂いた回答をPosgreSQLバージョンに書き換えてみました。
> ----------------------------------------------------
> scm.Parameters.Add(sParam);
> 89行目のところで以下のエラーとなりました。
> 誰か解決方法がわかる方おりませんでしょうか?
> ---------------------------------------------
> <エラー内容>
> NpgsqlParameterへ System.Data.SqlClient.SqlParameter を割り当てることができません
>
> 数字からキャストするとき、値は無限大より小さい数でなければなりません。
> 元の型が目的の型と互換性があることを確認します。
> この例外に関する一般的なヘルプを参照します。

> sParam = new SqlParameter("@url", SqlDbType.NChar);
多分ここの問題でしょう。
PosgreSQLバージョン に直ってませんよね?

sParam = new NpgsqlParameter("@url", NpgsqlDbType.Varchar);
こうなる筈なのでは?

あと
> sql = string.Format("INSERT INTO data{0} VALUES(@url)", i);
ここのテーブル名には気を付けてくださいね。

sql = string.Format("INSERT INTO item_data{0} VALUES(@url)", i);
多分こんな感じになるはずですが。。。
引用返信 編集キー/
■66760 / inTopicNo.11)  Re[10]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (5回)-(2013/05/22(Wed) 20:45:05)
No66745 (こりんご さん) に返信
> 2013/05/22(Wed) 09:25:25 編集(投稿者)
> 2013/05/22(Wed) 09:24:49 編集(投稿者)
>
> ■No66742 (?O?R ?O さん) に返信
>>>>C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
>>>>至らぬ点はあると思いますが、何か手がかりになれば幸いです。
> >>
> >>ありがとうございます!
> >>明日やってみます。
>>
>>こりんご さんから頂いた回答をPosgreSQLバージョンに書き換えてみました。
>>----------------------------------------------------
>>scm.Parameters.Add(sParam);
>>89行目のところで以下のエラーとなりました。
>>誰か解決方法がわかる方おりませんでしょうか?
>>---------------------------------------------
>><エラー内容>
>>NpgsqlParameterへ System.Data.SqlClient.SqlParameter を割り当てることができません
>>
>>数字からキャストするとき、値は無限大より小さい数でなければなりません。
>>元の型が目的の型と互換性があることを確認します。
>>この例外に関する一般的なヘルプを参照します。
>
>>sParam = new SqlParameter("@url", SqlDbType.NChar);
> 多分ここの問題でしょう。
> PosgreSQLバージョン に直ってませんよね?
>
> sParam = new NpgsqlParameter("@url", NpgsqlDbType.Varchar);
> こうなる筈なのでは?
>
> あと
>>sql = string.Format("INSERT INTO data{0} VALUES(@url)", i);
> ここのテーブル名には気を付けてくださいね。
>
> sql = string.Format("INSERT INTO item_data{0} VALUES(@url)", i);
> 多分こんな感じになるはずですが。。。

こりんごさんありがとうございます。

上記のように書き換えたところ、問題はクリアーされたと思います。

今度は、
if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
のところで以下のエラーが出ています。
--------------------------------------------------------------
NullReferenceExceptionはハンドルされませんでした。
オブジェクト参照がオブジェクト インスタンスに設定されていません。
トラブルシューティングのヒント:
オブジェクトインスタンスの作成にはnewキーワードを使用します。
メソッドを呼び出す前に、オブジェクトがNullで良いかどうか確認してください。
---------------------------------------------------------------
と出ます。

これは何でしょうか?
どの辺りがおかしいのでしょうか?
引用返信 編集キー/
■66763 / inTopicNo.12)  Re[11]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (3回)-(2013/05/22(Wed) 21:34:44)
2013/05/22(Wed) 21:57:58 編集(投稿者)
No66760 (?O?R ?O さん) に返信
> ■No66745 (こりんご さん) に返信
>>2013/05/22(Wed) 09:25:25 編集(投稿者)
>>2013/05/22(Wed) 09:24:49 編集(投稿者)
>>
>>■No66742 (?O?R ?O さん) に返信

> こりんごさんありがとうございます。
> 
> 上記のように書き換えたところ、問題はクリアーされたと思います。
> 
> 今度は、
> if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
> のところで以下のエラーが出ています。
> --------------------------------------------------------------
> NullReferenceExceptionはハンドルされませんでした。
> オブジェクト参照がオブジェクト インスタンスに設定されていません。
> トラブルシューティングのヒント:
> オブジェクトインスタンスの作成にはnewキーワードを使用します。
> メソッドを呼び出す前に、オブジェクトがNullで良いかどうか確認してください。
> ---------------------------------------------------------------
> と出ます。
> 
> これは何でしょうか?
> どの辺りがおかしいのでしょうか?

            for (int i = 1; i <= 5; i++)
            {
                 if ((Controls["listBox" + i] as ListBox).Items.Count > 0)

エラーが出る際の変数:iがいくつなのかわかりませんが、
listBox1〜listBox5までを順次調べてますから
その範囲内のリストボックスが存在しないとか
実は名前を変えているとかはないですかね?

でもこの場合だとForm1_Loadイベントでもエラーになるはずだし。。。
うちはC#2008 FrameWork3.5SP1 なので
環境による違いなのかな?

引用返信 編集キー/
■66783 / inTopicNo.13)  Re[12]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (6回)-(2013/05/23(Thu) 23:02:49)
No66763 (こりんご さん) に返信
> 2013/05/22(Wed) 21:57:58 編集(投稿者)
> ■No66760 (?O?R ?O さん) に返信
>>■No66745 (こりんご さん) に返信
> >>2013/05/22(Wed) 09:25:25 編集(投稿者)
> >>2013/05/22(Wed) 09:24:49 編集(投稿者)
> >>
> >>■No66742 (?O?R ?O さん) に返信
>
>>こりんごさんありがとうございます。
>>
>>上記のように書き換えたところ、問題はクリアーされたと思います。
>>
>>今度は、
>>if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
>>のところで以下のエラーが出ています。
>>--------------------------------------------------------------
>>NullReferenceExceptionはハンドルされませんでした。
>>オブジェクト参照がオブジェクト インスタンスに設定されていません。
>>トラブルシューティングのヒント:
>>オブジェクトインスタンスの作成にはnewキーワードを使用します。
>>メソッドを呼び出す前に、オブジェクトがNullで良いかどうか確認してください。
>>---------------------------------------------------------------
>>と出ます。
>>
>>これは何でしょうか?
>>どの辺りがおかしいのでしょうか?
>
> for (int i = 1; i <= 5; i++)
> {
> if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
>
> エラーが出る際の変数:iがいくつなのかわかりませんが、
> listBox1〜listBox5までを順次調べてますから
> その範囲内のリストボックスが存在しないとか
> 実は名前を変えているとかはないですかね?
>
> でもこの場合だとForm1_Loadイベントでもエラーになるはずだし。。。
> うちはC#2008 FrameWork3.5SP1 なので
> 環境による違いなのかな?

こりんごさん
ありがとうございます。

新しく作ったプロジェクトではitem_data5まで作ってなかったので、エラーとなっていました。
まさにこりんごさんが言っている通りでした。
全てインサートされました。うまく行きました!

ありがとうございます。
また、わからないところにぶち当たりましたらまた質問したいと思います。
引用返信 編集キー/
■66784 / inTopicNo.14)  Re[13]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (7回)-(2013/05/23(Thu) 23:45:47)
このリストボックスに入れたURLですが同じURLは入らないようにしたいと思います。
同じURLを入れた場合は MessageBox.Show("すでに入っています".ToString());
にしたいです。

ググッてみましたら、VBの書き方で書かれてるのを見つけましたが、これをC#にして見ようと思いましたが、…どう書けばいいのでしょうか?
すいません。宜しくお願い致します。

http://oshiete.goo.ne.jp/qa/5164031.html
引用返信 編集キー/
■66786 / inTopicNo.15)  Re[2]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ ?O?R ?O (8回)-(2013/05/24(Fri) 01:00:42)
皆様
yahooニュースのURLをリストボックスへ入れ、DBへ入れますよね。
URLがDBに格納されたと同時に「記事が配信された日付」もDBに格納したいのです。
つまり、HTML表記されているある一定の部分を抜き出してそれもDBへ格納したいのです。
どの部分かわかりづらいのでyahooBOXに画面キャプチャーを載せました。青ペンで囲ってある部分です。
http://yahoo.jp/box/ctTnh9

これはどうやればいいのでしょうか?
質問続きですが、宜しくお願い致します。

引用返信 編集キー/
■66787 / inTopicNo.16)  Re[14]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (4回)-(2013/05/24(Fri) 06:51:55)
2013/05/26(Sun) 15:11:40 編集(投稿者)
2013/05/26(Sun) 15:10:43 編集(投稿者)
2013/05/24(Fri) 22:16:05 編集(投稿者)
2013/05/24(Fri) 16:39:09 編集(投稿者)
2013/05/24(Fri) 16:38:23 編集(投稿者)
2013/05/24(Fri) 16:36:33 編集(投稿者)
2013/05/24(Fri) 07:08:12 編集(投稿者)

■No66784 (?O?R ?O さん) に返信
> このリストボックスに入れたURLですが同じURLは入らないようにしたいと思います。
> 同じURLを入れた場合は MessageBox.Show("すでに入っています".ToString());
> にしたいです。
> 
> ググッてみましたら、VBの書き方で書かれてるのを見つけましたが、これをC#にして見ようと思いましたが、…どう書けばいいのでしょうか?
> すいません。宜しくお願い致します。
> 
> http://oshiete.goo.ne.jp/qa/5164031.html

>「記事が配信された日付」もDBに格納したいのです。

PostgreSQLをインストして初めて使ってみました。
テーブル名はdata1〜data5として
全てに”url”と”hiduke”の列を作成して検証。
ともにtext型にしてます。。。。

ブラウザに表示するのは苦手なので
http://dobon.net/vb/dotnet/internet/webclientopenread.html
を参考にソースを取得してそこから取りだしました。

using Npgsql; //PostgreSQL
using NpgsqlTypes; //PostgreSQL
using System.Text.RegularExpressions; //正規表現

namespace FormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            for (int i = 1; i <= 5; i++)
            {
                (Controls["listBox" + i] as ListBox).AllowDrop = true;
                (Controls["listBox" + i] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
                (Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
            }
        }

        private void listBox_DragEnter(object sender, DragEventArgs e)
        {
            //URLのみ受け入れる//@ITより
            if (e.Data.GetDataPresent("UniformResourceLocator"))
                e.Effect = DragDropEffects.Link;
            else
                e.Effect = DragDropEffects.None;
        }

        private void listBox_DragDrop(object sender, DragEventArgs e)
        {
            //ドロップされたリンクのURLを取得する//@ITより
            String url = e.Data.GetData(DataFormats.Text).ToString();
            //結果を表示
            ((ListBox)sender).Text = url;
            //MessageBox.Show(url);
            //ドロップされたデータがString型か調べる
            if (e.Data.GetDataPresent(typeof(String)))
            {
                ListBox target = (ListBox)sender;
                //ドロップされたデータ(String型)を取得
                String itemText =
                    (String)e.Data.GetData(typeof(String));

                //ドロップされたデータがまだ未登録の場合
                if (target.Items.IndexOf(url) == -1)
                {
                    //ドロップされたデータをリストボックスに追加する
                    target.Items.Add(url);
                    //MessageBox.Show("表示");
                }
                else
                {
                    //既に登録されていたら
                    MessageBox.Show("この記事は既に登録されています");
                }
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {

            NpgsqlCommand scm;
            NpgsqlConnection scn = new NpgsqlConnection(@"Server=localhost;〜;"); // データベース名注意!
            String sql;
            Regex re = new Regex(@"&nbsp;(?<hiduke>.+?)配信", RegexOptions.Singleline);
            scn.Open();


            for (int i = 1; i <= 5; i++)
            {
                if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
                {
                    sql = string.Format("INSERT INTO data{0} VALUES(@url,@date)", i); //テーブル名注意!!
                    scm = new NpgsqlCommand(sql, scn);
                    NpgsqlParameter sParam1 = new NpgsqlParameter("@url", NpgsqlDbType.Varchar);
                    NpgsqlParameter sParam2 = new NpgsqlParameter("@date", NpgsqlDbType.Varchar);

                    for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
                    {

                        String url1 = (string)(Controls["listBox" + i] as ListBox).Items[m];
                        sParam1.Value = url1;

                        //WebClientの作成
                        System.Net.WebClient wc = new System.Net.WebClient();
                        //文字コードを指定
                        wc.Encoding = System.Text.Encoding.GetEncoding(51932);
                        //HTMLソースをダウンロードする
                        string sorce = wc.DownloadString(url1);
                        //後始末
                        wc.Dispose();

                        if (re.IsMatch(sorce))
                        {
                            sorce = re.Match(sorce).Groups["hiduke"].Value;
                        }
                        else
                        {
                            sorce = "None";
                        }

                        sParam2.Value = sorce;
                        scm.Parameters.Clear();
                        scm.Parameters.Add(sParam1);
                        scm.Parameters.Add(sParam2);
                        scm.ExecuteNonQuery();
                    }
                    scm.Dispose();
                }
            }

            MessageBox.Show("登録完了!!");
            scn.Close();
        }
    }
}

色々至らぬ所はあると思いますが
初心者ゆえお許し下さい。

引用返信 編集キー/
■66806 / inTopicNo.17)  Re[15]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ 外山 (1回)-(2013/05/29(Wed) 00:40:46)
No66787 (こりんご さん) に返信
いつもありがとうございます。

やってみましたらところ
scm.ExecuteNonQuery();
の所で以下のエラーが出ています。

--------------------------------------------
InvalidOperationExceptionはハンドルされませんでした。
接続は開いていません。

------------------------------------------
状況としては、リストボックス1とリストボックス2にURLを入れると上記のようになります。

リストボックス1のみにURLを入れてやれば、ちゃんとうまく行きます。

なにがおかしいのでしょうか??



引用返信 編集キー/
■66807 / inTopicNo.18)  Re[16]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご (6回)-(2013/05/29(Wed) 07:20:22)
2013/05/29(Wed) 10:27:35 編集(投稿者)
2013/05/29(Wed) 09:31:21 編集(投稿者)

No66806 (外山 さん) に返信
> ■No66787 (こりんご さん) に返信
> いつもありがとうございます。
>
> やってみましたらところ
> scm.ExecuteNonQuery();
> の所で以下のエラーが出ています。
>
> --------------------------------------------
> InvalidOperationExceptionはハンドルされませんでした。
> 接続は開いていません。
>
> ------------------------------------------
> 状況としては、リストボックス1とリストボックス2にURLを入れると上記のようになります。
>
> リストボックス1のみにURLを入れてやれば、ちゃんとうまく行きます。
>
> なにがおかしいのでしょうか??

C#そのものも余り経験なしで作ってしまいましたが、
こちらでは提示したコードは事前に何度か検証してましたが
同様のエラー発生は起きていませんでしたので、
ちょっと不明ですね。
⇒提示したコードから何か変更・追加・削除があったのなら
その部分を調べたほうが良いのかも?

> 接続は開いていません。
全てのリストボックスを調べるまで接続を切るようには
していないはずですが、その辺に手を加えられたとか?

エラーが出る前に
> MessageBox.Show("登録完了!!");
一度メッセージが出るとしたら
{ } の組み合わせにどこかズレがあるのかも知れません。

>for (int i = 1; i <= 5; i++)
>{
このループの中に
>MessageBox.Show("登録完了!!");
>scn.Close();
これが入ってしまっているなら
そのエラーはあり得るかも知れません。
引用返信 編集キー/
■66829 / inTopicNo.19)  Re[17]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ 外山 (2回)-(2013/05/30(Thu) 01:17:15)
No66807 (こりんご さん) に返信
> 2013/05/29(Wed) 10:27:35 編集(投稿者)
> 2013/05/29(Wed) 09:31:21 編集(投稿者)
>
> ■No66806 (外山 さん) に返信
>>■No66787 (こりんご さん) に返信
>>いつもありがとうございます。
>>
>>やってみましたらところ
>>scm.ExecuteNonQuery();
>>の所で以下のエラーが出ています。
>>
>>--------------------------------------------
>>InvalidOperationExceptionはハンドルされませんでした。
>>接続は開いていません。
>>
>>------------------------------------------
>>状況としては、リストボックス1とリストボックス2にURLを入れると上記のようになります。
>>
>>リストボックス1のみにURLを入れてやれば、ちゃんとうまく行きます。
>>
>>なにがおかしいのでしょうか??
>
> C#そのものも余り経験なしで作ってしまいましたが、
> こちらでは提示したコードは事前に何度か検証してましたが
> 同様のエラー発生は起きていませんでしたので、
> ちょっと不明ですね。
> ⇒提示したコードから何か変更・追加・削除があったのなら
> その部分を調べたほうが良いのかも?
>
>>接続は開いていません。
> 全てのリストボックスを調べるまで接続を切るようには
> していないはずですが、その辺に手を加えられたとか?
>
> エラーが出る前に
>>MessageBox.Show("登録完了!!");
> 一度メッセージが出るとしたら
> { } の組み合わせにどこかズレがあるのかも知れません。
>
> >for (int i = 1; i <= 5; i++)
> >{
> このループの中に
> >MessageBox.Show("登録完了!!");
> >scn.Close();
> これが入ってしまっているなら
> そのエラーはあり得るかも知れません。

こりんご様
やはり、うまく行かないのです…

>⇒提示したコードから何か変更・追加・削除があったのなら
>その部分を調べたほうが良いのかも?

PostgreSQLのテーブルはitem_data1〜item_data5を用意しております。
列1は「url」列2は「date」です。

テーブルの記述の部分も以下のように書いております。

sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);

検討はずれですかね?


>全てのリストボックスを調べるまで接続を切るようには
>していないはずですが、その辺に手を加えられたとか?
特に何か加えた覚えはないのです。

>一度メッセージが出るとしたら
>{ } の組み合わせにどこかズレがあるのかも知れません。
これは出ていません。

>for (int i = 1; i <= 5; i++)
>{
>このループの中に
>MessageBox.Show("登録完了!!");
>scn.Close();
>これが入ってしまっているなら
>そのエラーはあり得るかも知れません。
ループの外に出ているのでこれも大丈夫です。

私こそ初心者的な質問ですいません。
確認の程、宜しくお願い致します。

引用返信 編集キー/
■66830 / inTopicNo.20)  Re[18]: C# Postgre URL、リストボックスへ格納、表示
 
□投稿者/ こりんご (7回)-(2013/05/30(Thu) 09:16:14)
2013/05/30(Thu) 10:16:59 編集(投稿者)
No66829 (外山 さん) に返信
> ■No66807 (こりんご さん) に返信
>>2013/05/29(Wed) 10:27:35 編集(投稿者)
>>2013/05/29(Wed) 09:31:21 編集(投稿者)
>>
>>■No66806 (外山 さん) に返信
> こりんご様
> やはり、うまく行かないのです…
>
> >⇒提示したコードから何か変更・追加・削除があったのなら
> >その部分を調べたほうが良いのかも?
>
> PostgreSQLのテーブルはitem_data1〜item_data5を用意しております。
> 列1は「url」列2は「date」です。
>
> テーブルの記述の部分も以下のように書いております。
> ↓
> sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);
>
> 検討はずれですかね?
>
>
> >全てのリストボックスを調べるまで接続を切るようには
> >していないはずですが、その辺に手を加えられたとか?
> 特に何か加えた覚えはないのです。
>
> >一度メッセージが出るとしたら
> >{ } の組み合わせにどこかズレがあるのかも知れません。
> これは出ていません。
>
> >for (int i = 1; i <= 5; i++)
> >{
> >このループの中に
> >MessageBox.Show("登録完了!!");
> >scn.Close();
> >これが入ってしまっているなら
> >そのエラーはあり得るかも知れません。
> ループの外に出ているのでこれも大丈夫です。
>
> 私こそ初心者的な質問ですいません。
> 確認の程、宜しくお願い致します。


> sql = string.Format("INSERT INTO item_data{0} VALUES(@url,@date)", i);
> PostgreSQLのテーブルはitem_data1〜item_data5を用意しております。
> 列1は「url」列2は「date」です。
テーブル名と列名及び書き込むSQL文を上記のようにして検証しました。
結果としては問題なく書き込みは出来ました。
なのであとはそちらの環境に何かあるのか???
としか思えないのですが、原因となるものについては思いつかないですね。
⇒コードを提示すると何故か”迷惑者?”と言われて書き込めないのですが・・・・

あとこちらはスタンドアローンで検証していますので、
もしサーバーが別の所にあるとしたらそっち方面はまったくの未経験で
わからないですね。
引用返信 編集キー/

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

管理者用

- Child Tree -