26

DbCommand次のようなものを実行するように定義されている場合:

SELECT Column1 FROM Table1

List<String>返されたレコードを生成する最良の方法は何ですか?

私はVS2005を使用しているため、Linqなどはありません。

4

6 に答える 6

43

これがあなたが探しているものだと思います。

List<String> columnData = new List<String>();

using(SqlConnection connection = new SqlConnection("conn_string"))
{
    connection.Open();
    string query = "SELECT Column1 FROM Table1";
    using(SqlCommand command = new SqlCommand(query, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                columnData.Add(reader.GetString(0));
            }         
        }
    }
}

テストされていませんが、これは正常に動作するはずです。

于 2012-08-19T04:34:49.563 に答える
5

アイテムをループしてコレクションに追加します。Addメソッドを使用できます

List<string>items=new List<string>();
using (var con= new SqlConnection("yourConnectionStringHere")
{
    string qry="SELECT Column1 FROM Table1";
    var cmd= new SqlCommand(qry, con);
    cmd.CommandType = CommandType.Text;
    con.Open();
    using (SqlDataReader objReader = cmd.ExecuteReader())
    {
        if (objReader.HasRows)
        {              
            while (objReader.Read())
            {
              //I would also check for DB.Null here before reading the value.
               string item= objReader.GetString(objReader.GetOrdinal("Column1"));
               items.Add(item);                  
            }
        }
    }
}
于 2012-08-19T04:35:48.390 に答える
0

すべての列をクエリしたい場合

List<Users> list_users = new List<Users>();
MySqlConnection cn = new MySqlConnection("connection");
MySqlCommand cm = new MySqlCommand("select * from users",cn);
try
{
    cn.Open();
    MySqlDataReader dr = cm.ExecuteReader();
    while (dr.Read())
    {
        list_users.Add(new Users(dr));
    }
}
catch { /* error */ }
finally { cn.Close(); }

ユーザーのコンストラクターは、すべての「dr.GetString(i)」を実行します。

于 2016-03-04T14:26:36.253 に答える
0

返されるデータは文字列です。別のデータ型にキャストできます。

(from DataRow row in dataTable.Rows select row["columnName"].ToString()).ToList();
于 2016-03-31T19:15:48.840 に答える
0

このバージョンは @Dave Martin と同じ目的を持っていますが、よりクリーンで、すべての列を取得し、メールやビューなどに配置したくない場合はデータを簡単に操作できます。

List<string> ResultSet = new List<string>();
using (SqlConnection connection = DBUtils.GetDBConnection())
{
    connection.Open();
    string query = "SELECT * FROM DATABASE";
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
             while (reader.Read())
             {
                  var rec = new List<string>();
                  for (int i = 0; i <= reader.FieldCount - 1; i++)
                  {
                       rec.Add(reader.GetString(i));
                  }
                  string combined = string.Join("|", rec);
                  ResultSet.Add(combined);
             }
        }
    }
}
于 2022-01-03T11:12:17.630 に答える