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(@" (?<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();
}
}
}
色々至らぬ所はあると思いますが
初心者ゆえお許し下さい。