0

查询是正确的,但我想访问行数并显示在前端页面中。此代码引发错误。

   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 作为数据库,并且它已经连接。

4

2 回答 2

1

由于您需要单个值,因此您可以简单地使用命令并获取值DataTableDataReaderExcuteScalar

 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更好地使用命令和连接。

于 2021-03-18T10:33:00.810 回答
1

对以下代码行使用数字索引

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();

任何一个选项都应该适合您。注意:数字索引为零,因为它是从零开始的索引。我相信你明白这一点

于 2021-03-18T10:31:58.093 回答