4

これに似た私の質問は、OracleDataReader を使用して特定のレコードのすべてのフィールドを取得するにはどうすればよいですか? 現在、一度に 1 つの列の値のみを返すこのメソッドを使用しています。

public string Select_File(string filename, string subdirectory, string envID)
{
    Data_Access da = new Data_Access();
    OracleConnection conn = da.openDB();

    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "SELECT * FROM EIP_Deployment_Files" 
        + " WHERE Filename ='" + filename + "'"
        + " AND Subdirectory = '" + subdirectory + "'"
        + " AND Environment_ID = '" + envID + "'";
    cmd.CommandType = CommandType.Text;

    string x;
    OracleDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows) // file exists in DB
    {
        dr.Read();
        x = dr.GetString(2).ToString(); // return baseline filename (index 2)
    }
    else
    {
        x = "New File";
    }

    cmd.Dispose();
    da.CloseDB(conn);
    return x;
}

この方法は完璧にはほど遠いと確信しており、人々はすぐにそれを指摘するでしょう (ASP.NET の経験がなかったので、基本的に上司から与えられました)。それが機能すること。私の質問は、特定のレコードのすべてのフィールドを返すように変更するにはどうすればよいですか?

フィールドは VARCHAR2、CHAR、または DATE のいずれかのデータ型になり (違いがある場合)、これらの値の一部は null になる場合があります。それらを文字列に変換してリストとして返すことができると思いますか?

4

3 に答える 3

10

このようなものが必要な場合:

List<User> lstUser = new List<User>();
            string sqlQuery = "Select * from User_T where User_Name='" + oUser.UserName + "' And Password='" +oUser.Password + "' AND IsActive='"+1+"' AND IsDelete='"+0+"'";
            string connectionString = "Data Source=ORCL;User Id=ACCOUNTS;Password=ACCOUNTS";
            using (DBManager dbManager = new DBManager(connectionString))
            {
                try
                {

                    dbManager.Open();
                    OracleDataReader dataReader = dbManager.ExecuteDataReader(sqlQuery);
                    while (dataReader.Read())
                    {
                        oUser = new User();
                        oUser.Id = Convert.ToInt32(dataReader["ID"]);
                        oUser.CompanyId = Convert.ToInt32(dataReader["Company_ID"]);
                        oUser.BranchId = Convert.ToInt32(dataReader["Branch_ID"]);
                        oUser.UserName = Convert.ToString(dataReader["User_Name"]);
                        lstUser.Add(oUser);
                    }
                    dataReader.Close();
                    dataReader.Dispose();

                }
                catch
                (Exception)
                {


                }
                finally
                {
                    dbManager.Close();
                    dbManager.Dispose();
                }
于 2013-04-25T20:25:29.417 に答える
6

DataReader で現在の行の列からすべてのデータを読み取るには、単純に GetValues() を使用し、配列から値を抽出します。値はデータベース タイプのオブジェクトになります。

Object[] values;
int numColumns = dr.GetValues(values); //after "reading" a row
for (int i = 0; i < numColumns; i++) {
    //read values[i]
}

MSDN - 「ほとんどのアプリケーションでは、GetValues メソッドは、各列を個別に取得するのではなく、すべての列を取得するための効率的な手段を提供します。」

于 2013-04-25T18:59:27.770 に答える