質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.25%

DBから値を取得して、テキストボックスに表示させる

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,675
退会済みユーザー

退会済みユーザー

前提・実現したいこと

プログラミング初心者です。現在簡単な単語帳アプリを作成中です。
現在DBから値を取得して、テキストボックスに表示させようとしております。
そのためにDBUtilsというクラスを作成し、取得した値を文字列、もしくは文字列配列にして変数に値を代入し、
それを引数で別のクラスに渡そうとしている中でエラーが出ました。
キャストすべきなのか、そもそも書き方が間違えているのか、悩んでおります。
アドバイスいただけたらと思っております。

発生している問題・エラーメッセージ

(DBUtils.csでのエラー)
1.エラー    CS0825    コンテキスト キーワード 'var' は、ローカル変数宣言内またはスクリプト コード内でのみ有効です。    
2.エラー    CS0136    ローカルまたはパラメーター 'datas' は、その名前が外側のローカルのスコープでローカルやパラメーターの定義に使用されているため、このスコープでは宣言できません。    
3.警告    CS0168    変数 'e' は宣言されていますが、使用されていません。

(VocabForm.csでのエラー)
1.エラー    CS1003    構文エラーです。',' が必要です。
2.エラー    CS0825    コンテキスト キーワード 'var' は、ローカル変数宣言内またはスクリプト コード内でのみ有効です。    
3.エラー    CS0136    ローカルまたはパラメーター 'datas' は、その名前が外側のローカルのスコープでローカルやパラメーターの定義に使用されているため、このスコープでは宣言できません。
4.エラー    CS0103    現在のコンテキストに 'var' という名前は存在しません。    
5.エラー    CS0841    宣言する前にローカル変数 'datas' を使用できません。
6.エラー    CS0165    未割り当てのローカル変数 'datas' が使用されました。    
7.警告    CS0168    変数 'e' は宣言されていますが、使用されていません。    

※3つ目は    

該当のソースコード

C#

(DBUtils.cs)
using Npgsql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WordCards
{
class DBUtils
{
public static void Method(var datas)
{
string conStr = "Server = localhost; Port = 5432; User Id = postgres; Password = ; Database = vocab";
NpgsqlConnection conn = new NpgsqlConnection(conStr);

try
{
conn.Open(); //接続オープン
var cmd = new NpgsqlCommand(@"select * from celebsschem.t_celebs", conn); //SQL生成し、DBへ
var dataReader = cmd.ExecuteReader();//結果を取得
var datas = dataReader;//取得したデータをそしてデータを別のクラスに渡したい。

}
catch(Exception e)
{

}
conn.Close();
}
}
}

(VocabForm.cs)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WordCards
{
public partial class VocabForm : Form
{
public VocabForm()
{
InitializeComponent();
}
private int sec = 10;

private void StartBtn_Click(object sender, EventArgs e)
{
if (!RandomRadioBtn.Checked && !OrderRadioBtn.Checked)
{
MessageBox.Show("表示形式を選択してください。");
}
/*else if(CategoryComboBox.Text == "カテゴリ選択")
{
MessageBox.Show("カテゴリ選択をしてください");
}*/
else
{
/*スタートボタンクリック時にコントロールの非表示・表示を設定*/
StartBtn.Visible = false;
RandomRadioBtn.Visible = false;
OrderRadioBtn.Visible = false;
TimerRadioBtn.Visible = false;
CategoryComboBox.Visible = false;
CategGroupBox.Visible = false;
WordLabel.Visible = true;
MeaningLabel.Visible = true;
WordsRichTxtBox.Visible = true;
MeanRichTxtBox.Visible = true;
BackBtn.Visible = true;
ShowAnsBtn.Visible = true;
NextBtn.Visible = true;
CountDownTimerLabel.Visible = true;

var datas = new DBUtils();  //ここでクラス生成
WordsRichTxtBox.Text = datas.ToString();//値をリッチテキストボックスに表示

if (TimerRadioBtn.Checked)
{
CDTimer.Start();
}
}

}

private void ExitBtn_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void AddWordsMenuItem_Click(object sender, EventArgs e)
{
AddWordsForm AddWordsForm = new AddWordsForm();
AddWordsForm.Show();

}

private void CDTimer_Tick(object sender, EventArgs e)
{
if(sec > 0)
{
sec = sec - 1;
CountDownTimerLabel.Text = "残り" + sec + "秒";
}
}
}
}

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

スタートボタンクリックのイベントハンドラで単語表示用リッチテキストボックス等のコントロールが表示され、単語表示用のリッチテキストボックスに表示させたいです。

言語はC#を使用しています。Visual Studio2015で、NpgsqlをNugetでインストールしてPostgreSQL9.3と接続して値を取得しようとしています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ishi9

    2016/10/13 10:34 編集

    「```」でコードを囲うと見やすくなります。その他の見やすくする設定は以下のURLを参考にしてください。コードブロック,URLと画像のリンクだけは覚えておくといいです。(ちなみにこことコメント返答欄では使えません)http://qiita.com/Qiita/items/c686397e4a0f4f11683d

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/10/13 22:19

    アドバイスありがとうございます!参考にさせていただきます!いつもありがとうございます!

    キャンセル

回答 1

+1

コンパイラーのエラーメッセージを順番に読んでいきましょう。

この回答では発生したエラーを上から順番にエラーコード(CSで始まる英数字)で示します。見出しをクリックすると Microsoft のページで詳細が表示されます。

 1. CS0825

public static void Method(var datas)
                          ^^^

メソッドの引数宣言では型を明示する必要があります。C# で var を使用して型指定を省略することができるのは現時点ではメソッドの中で宣言と同時に初期化されるローカル変数のみです。

見たところ datas は使用されていないようなので削除すると良いです。

 2. CS0136

var datas = dataReader;
^^^

上記の datas と名前が同じ変数を宣言しているために起きています。C# では同じ名前とスコープを持つ引数またはローカル変数を宣言することはできません。引数の方を削除すれば良いです。

 3. CS0168

catch(Exception e)
                ^

警告なので無視することができます。使用していない変数があるために表示されています。

 4. CS1003

構文エラーです。カンマが足りないとも限りません。

P.S. コードを書く際はコードブロックを使用するようにしましょう。読みづらいです……。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/13 22:17

    まずはエラー確認ですね!!意識していきます!アドバイスありがとうございます!
    コードに関してはすみません。。見やすくなるように意識していきます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.25%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる