2017-06-04 142 views
0

データベースに格納するデータを配列に格納しようとしていますが、SqlDataReaderは、ORDER BY DESCまたはASCを使用すると最後または最初のいずれかの行を読み取ります。C#SqlDataReaderは1行だけを読み取る

コード:

private void chkAdr() 
{ 
    string connStr = "Data Source=MARINCHI\\SQLEXPRESS;Initial Catalog=login1;Integrated Security=True"; 

    SqlConnection conn = new SqlConnection(connStr); 
    conn.Open(); 

    SqlCommand getAdr = new SqlCommand("SELECT adress, floor,city, state, country, zipcode FROM userAdress where userID = @userID", conn); 

    SqlParameter parUserID = new SqlParameter("@userID", Login.id); 
    getAdr.Parameters.Add(parUserID); 

    getAdr.ExecuteNonQuery(); 

    SqlDataReader dr = getAdr.ExecuteReader(); 

    string[] adress = new string[100]; 
    string[] floor = new string[100]; 
    string[] city = new string[100]; 
    string[] state = new string[100]; 
    string[] country = new string[100]; 
    string[] zipcode = new string[100]; 

    while (dr.Read()) 
    { 
     int count = dr.FieldCount; 

     for (int i = 0; i < count; i++) 
     { 
      adress[i] = dr["adress"].ToString(); 
      floor[i] = dr["floor"].ToString(); 
      city[i] = dr["city"].ToString(); 
      state[i] = dr["state"].ToString(); 
      country[i] = dr["country"].ToString(); 
      zipcode[i] = dr["zipcode"].ToString(); 
     } 

     // test to see, what values I get, no matter what adress[i] for I any number, always get the last data from my table in sql... 
     textBox5.Text = adress[0]; 
     textBox6.Text = floor[0]; 
     textBox7.Text = city[0]; 
     textBox8.Text = state[1]; 
     textBox9.Text = country[1]; 
     textBox10.Text = zipcode[1]; 
    } 

    dr.Close(); 
} 

私はdr.HasRowsを試みたが、それは本当に私のために動作しませんでした、と私はGoogleで検索し、すべての組み合わせを試してみましたが、何も動いていないようにみえ、私はそれがで動作するように取得することはできません最後の行まで懇願してください。

これは、ユーザーが自分のアドレスを追加した場合にデータベースからアドレスを取得するためのコードのコンポーネントである必要があります。実際に終了すると、コンボボックスにオプション "Saved address 1 "をクリックすると、テキストボックスに表示されます。 2つのアドレスがある場合も同じで、どちらも追加する必要があります。

SqlDataReaderは最後の行または最初の行のみを読み取るため、ユーザーが追加したすべてのアドレスを読み取ることはできません。誰かが私にこれを行う方法について考えている場合は、助けてください!ありがとう!

+2

をなぜあなたはは、ExecuteNonQueryを実行し、その後のExecuteReaderていますか? – hardkoded

+0

ExecuteNonQueryは、SQLコマンドの実行に使用されるパラメータを使用して、データベースからデータを読み取り、配列にemを格納できるようにreaderを実行します。 – Rin

+0

getAdr.ExecuteNonQuery()を呼び出す必要はありません.ExecuteReaderは十分です。 – hardkoded

答えて

3

あなたはループが正しくない、あなたは次のように読んでください。

int i = 0; 
while (dr.Read()) 
{    
    adress[i] = dr["adress"].ToString(); 
    floor[i] = dr["floor"].ToString(); 
    city[i] = dr["city"].ToString(); 
    state[i] = dr["state"].ToString(); 
    country[i] = dr["country"].ToString(); 
    zipcode[i] = dr["zipcode"].ToString(); 
    i++; 
} 
+0

まだ問題は解決していないことに気付きました、私は Rin

+0

whileループのforループがあるので、同じ行を3回書き込んで、そこにあったものすべてを書き換えます。最後の行が3回終了します。 –

+0

ああ何が問題なのか私はそれを試してみましょう。 – Rin

関連する問題