5

ms access データベースのデータを読み取り、リストボックスに表示するにはどうすればよいですか。ここにコードがありますが、エラーが発生しました。

 private void button3_Click(object sender, EventArgs e)
    {
        using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\Sisc-stronghold\mis!\wilbert.beltran\DataBase\DataStructure.accdb"))
        using(OleDbCommand cmd = new OleDbCommand(" SELECT * from TableAcct", conn))
        {
            conn.Open();
            OleDbDataReader Reader = cmd.ExecuteReader();
            //if (Reader.HasRows)
            if (Reader.HasRows)
            {
                Reader.Read();
                listBox1.Text = Reader.GetString("FirstName");
            }
        } 

エラーは次のとおりです。 1. エラー 1 'System.Data.Common.DbDataReader.GetString(int)' に最適なオーバーロードされたメソッドに無効な引数がいくつかあります。2. エラー 2 引数 '1': 'string' から 'int' に変換できません

4

7 に答える 7

7

これを試して、

       List<String> firstName = new List<String>();
       List<String> lastName = new List<String>();

       private void loadButton_Click(object sender, EventArgs e)
       {
                cn.Open();
                OleDbDataReader reader = null;
                cmd = new OleDbCommand("select* from Records", cn);
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    firstName.Add(reader["FirstName"].ToString());
                    lastName.Add(reader["LastName"].ToString());
                }
                cn.Close();
       }

次に、検索ボタンにこれを挿入し、

private void searchButton_Click(object sender, EventArgs e)
        {
            clearSearchResult();
            try
            {
                int totalItems = FirstName.Count;
                int count = 0;
                while (count < totalItems)
                {
                    if (textBox6.Text == FirstName[count].ToString())
                    {
                        listBox1.Items.Add(FirstName[count].ToString());
                        count = 100;
                    }
                    else
                    {
                        count++;
                    }

"FirstName"必要に応じて、の情報を表示したい場合に使用するとlistBox1_SelectedIndexChangedよいでしょう。これが例です。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
                int totalItems = lastName.Count;
                int count = 0;
                while (count < totalItems)
                {
                    if ((listBox1.SelectedItem.ToString()) == firstName[count].ToString()))
                    {
                        textBox1.Text = firstName[count].ToString();
                        textBox2.Text = lastName[count].ToString();
                        count = 100;
                    }
                    else
                    {
                        count++;
                    }
               }

お役に立てれば、

于 2013-02-28T06:39:19.413 に答える
1

MS Access データベースを作成してアクセスし、コンポーネントにデータを表示したい場合、ここでは、MS Access データベースに接続してデータベースからのデータを Label に表示する方法を示します。 まず、「PirFahimDataBase」のような Access データベースを作成します。Visual Studioでメニューに移動してこれを行います

  1. クリックデータ
  2. 新しいデータベースを追加
  3. [次へ] をクリックします
  4. [新しい接続] をクリックします
  5. [変更] をクリックして [データ ソース] を変更し、[Microsoft Access データベース ファイル] を選択します。
  6. [参照] をクリックして、作成したデータベースを選択します

Button ClickEvent に、データベースからデータを取得してラベルに表示するこれらのコードを貼り付けます。

using System.Windows.Forms; //these two lines should be written before namespace at top of the program
using System.Data.OleDb;

private void button1_Click(object sender, EventArgs e)
    {        
      System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
     conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
    @"Data source= C:\Users\pir fahim shah\Documents\PirFahimDataBase.accdb";

    try
     {
     conn.Open();
     MessageBox.Show("connected successfuly");
     OleDbDataReader reader  = null;  // This is OleDb Reader
   OleDbCommand cmd = new OleDbCommand("select TicketNo from Table1 where Sellprice='6000' ", conn);
    reader = cmd.ExecuteReader();
    while (reader.Read())
    {
     label1.Text= reader["TicketNo"].ToString();           

    }

}
    catch (Exception ex)
{
    MessageBox.Show("Failed to connect to data source");
}
finally
{
    conn.Close();
}    
 }//end of button click event
于 2014-03-02T13:28:17.943 に答える
1

GetString()パラメータとして、文字列ではなく int を取ります。列のインデックスを使用する必要があることを意味します。

「FirstName」が2番目の列であるため、特定の状況では、インデックスは1になります。

listBox1.Text = Reader.GetString(1);

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getstring.aspx

于 2013-02-28T05:51:39.627 に答える
1

変化する

listBox1.Text = Reader.GetString("FirstName");

listBox1.Text = Reader.GetString(0); // zero base ordinal of column
于 2013-02-28T05:54:25.507 に答える
1

Whileループを使用する

while(reader.Read())
{
   listbox1.Items.Add(reader["FirstName"]);
}

これにより、選択したすべての行が移動します。それ以上行がない場合はreader.Read()戻ります。false

また、列から valmue を取得する場合は、readerインスタンスのインデックスを使用して取得することをお勧めします。私の例のように。

var value = reader["ColumnName"];

これにより、

var value = reader.GetString(0);

アップデート

最初の値のみを表示する場合はcmd.ExecuteScalar()、必要な値のみを返すように SQL を使用して適応させることをお勧めします。

using(OleDbCommand cmd = new OleDbCommand("SELECT firstname from TableAcct", conn))
{
   conn.Open();
   var firstName = cmd.ExecuteScalar();
}

これにより、テーブルの最初の「FirstName」が得られることに注意してください。また、"order by firstname"or "where someKey = 1"- がないため、期待どおりに返されない可能性があります。

于 2013-02-28T06:03:09.253 に答える
0
DataColumn[] PrimaryKeyColumn = new DataColumn[1]; //Define Primary coloumn
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable();
ReadAndUpdateExcel.ReadExcel(strPath, sheetName, out dataSet);
dataSet.Tables.Add(dataTable);
PrimaryKeyColumn[0] = dataSet.Tables[0].Columns[0];
dataSet.Tables[0].PrimaryKey = PrimaryKeyColumn;
string num = dataSet.Tables[0].Rows[dataSet.Tables[0].Rows.IndexOf(dataSet.Tables[0].Rows.Find(strTCName))]["ACNO"].ToString();
//string country
于 2016-05-07T04:48:49.077 に答える
0

エラーは次の行にあります。

listBox1.Text = Reader.GetString("FirstName");

関数に数値を渡す必要がありGetString()ます。

于 2013-02-28T05:52:26.937 に答える