Получите значение Count из строк базы данных в ASP.NET веб-приложение

#c# #asp.net #ado.net #oraclecommand

Вопрос:

Запрос правильный, но я хочу получить доступ к количеству строк и отобразить их на главной странице. Этот код выдает ошибку.

    protected void Page_Load(object sender, EventArgs e)
        {
            string constr = ConfigurationManager.ConnectionStrings["ConnectionString_cw"].ConnectionString;
            OracleCommand cmd = new OracleCommand();
            OracleConnection con = new OracleConnection(constr);
            con.Open();
            cmd.Connection = con;
            cmd.CommandText = @"SELECT COUNT (*) from dish";
            cmd.CommandType = CommandType.Text;

            DataTable dt = new DataTable("Dish");
            using (OracleDataReader sdr = cmd.ExecuteReader())
            {
                if (sdr.HasRows)
                {
                    dt.Load(sdr);
                    recordMsg.Text = sdr["count(*)"].ToString();
                }

            }
            con.Close();
        }
 

Я использую Oracle в качестве базы данных, и она уже подключена.

Ответ №1:

Поскольку вам нужно одно значение, оно бесполезно DataTable , и DataReader вы можете просто использовать ExcuteScalar команду и получить значения.

  command.ExecuteScalar();
 

Больше Чтения https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=dotnet-plat-ext-5.0

или просто

 recordMsg.Text=command.ExecuteScalar().ToString();
 

Таким образом, весь код может быть написан как

 string constr = ConfigurationManager.ConnectionStrings["ConnectionString_cw"].ConnectionString;
OracleCommand cmd = new OracleCommand();
OracleConnection con = new OracleConnection(constr);
con.Open();
cmd.Connection = con;
cmd.CommandText = @"SELECT COUNT (*) from dish";
cmd.CommandType = CommandType.Text;
recordMsg.Text=command.ExecuteScalar().ToString();
 

Также рекомендуется использовать using statement для лучшего использования команд и подключения.

Ответ №2:

Используйте числовой индекс для следующей строки кода

 recordMsg.Text = sdr["count(*)"].ToString();
 

Измените его на…

 recordMsg.Text = sdr[0].ToString();
 

Или:

Измените две строки кода ниже:

 cmd.CommandText = @"SELECT COUNT (*) from dish";
recordMsg.Text = sdr["count(*)"].ToString();
 

Читать

 cmd.CommandText = @"SELECT COUNT (*) as rCount from dish";
recordMsg.Text = sdr["rCount"].ToString();
 

Любой из вариантов должен хорошо работать для вас.
Примечание: Числовой индекс равен нулю, потому что это индекс, основанный на нуле. Я надеюсь, вы это понимаете