#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();
Любой из вариантов должен хорошо работать для вас.
Примечание: Числовой индекс равен нулю, потому что это индекс, основанный на нуле. Я надеюсь, вы это понимаете