3

シンプルなログインページがあります。私がやりたいのは、ログインが正しいときです。すべての列を表示したいのですが、while ループで表示する列を手動で指定したくありません。

これは、SQL Server 2008 Express を使用して C# で作成したサンプルです。

private void Authenticate(string userName, string password)
{
    string connString = "server=.\\sqlexpress; database=TestDatabase; trusted_connection=true";
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();

    string sqlCommand = "select * from Registration where UserName='" + userName + "' and   Password='" + password + "'";
    SqlCommand command = conn.CreateCommand();
    command.CommandText = sqlCommand;

    SqlDataReader reader = command.ExecuteReader();          

    while (reader.Read())
    {
        lblResult.Text += reader["CourseId"] + " " + reader["CourseName"] + " " + reader["Instructor"] + "<br />";
    }

}

これが最良の実装ではないことはわかっています。

登録テーブルから返されたすべてのものを lblResult に入力するにはどうすればよいですか?

4

2 に答える 2

4
StringBuilder sb = new StringBuilder(1024); /* arbitrary size */
while (reader.read())
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
        sb.Append(reader.GetName(i));
        sb.Append(": ");
        sb.Append(reader[i]);
    }
    sb.Append("<br />");
}
lblResult.Text = sb.ToString();

MSDN docsに基づく、そのようなもの。

于 2012-12-31T21:28:45.533 に答える
3

Aには、返されたフィールドの数を示すSqlDataReaderというプロパティがあり、その知識を使用してItemsインデックスを反復処理するだけです。また、文字列を連結してパフォーマンスを向上させる代わりに、をFieldCount使用して結果の文字列を作成します。StringBuilderこのようなもの:

var str = new StringBuilder()
while (reader.Read())
{
    for(int i=0; i<reader.FieldCount ; i++)
    {
        str.Append(reader[i].ToString());
        str.Append(" ");
    }
    str.Append("<br/>");    
}
lblResult.Text = str.ToString();
于 2012-12-31T21:27:32.123 に答える