【问题标题】:Cannot display query results using cmd.ExecuteNonQuery in C#无法在 C# 中使用 cmd.ExecuteNonQuery 显示查询结果
【发布时间】:2013-06-23 10:39:18
【问题描述】:

我有一个乐透抽奖方法,它应该从已购买彩票的数据库中找到中奖彩票。但我无法显示查询结果。 (我知道这不是乐透的真正运作方式,我稍后会随机分配数字:P)

draw.aspx.cs

public void LottoDraw(object sender, EventArgs e)
{
    var connectionstring = "Server=C;Database=lotto;User Id=lottoadmin;Password=password;";

    using (var con = new SqlConnection(connectionstring))  // Create connection with automatic disposal
    {
        con.Open();

        using (var tran = con.BeginTransaction())  // Open a transaction
        {
            // Create command with parameters
            string sql =
                "SELECT TOP 1 * FROM tblLotto ORDER BY NEWID()";
            var cmd = new SqlCommand(sql, con);

            cmd.Transaction = tran;
            cmd.ExecuteNonQuery(); // Execute the query

            tran.Commit();  // commit transaction

            Response.Write("<br />");
            Response.Write("<br />");
            Response.Write("end...");
        }
    }
}

【问题讨论】:

  • ExecuteNonQuery 只能用于不返回值的 INSERTDELETEUDPATE 语句。对于SELECT,使用ExecuteReader() 来取回SqlDataReader,这样您就可以真正读取查询返回的结果。 ADO.NET 基础 101

标签: c# asp.net executenonquery


【解决方案1】:

这是因为您使用的是执行非查询。

要检索结果,您需要使用 SQLReader 或 SqlDataAdapter

我个人觉得使用 DataAdapter 更容易:

    DataTable t = new DataTable();

    using (SqlConnection c = new SqlConnection(DataConnectionString))
    {
         c.Open();
         // Create new DataAdapter
         using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM EmployeeIDs", c))     
         {
              // Use DataAdapter to fill DataTable
              a.Fill(t);
         }
    }

然后您可以通过以下方式访问您的数据:

 if(t.Rows.Count == 1){

      String val0 = t.Rows[0]["VAL0"].ToString();
      String val1 = t.Rows[0]["VAL1"].ToString();
      String val2 = t.Rows[0]["VAL2"].ToString();
      String val3 = t.Rows[0]["VAL3"].ToString();
      String val4 = t.Rows[0]["VAL4"].ToString();
      String val5 = t.Rows[0]["VAL5"].ToString();
 }

【讨论】:

  • 谢谢,我在尝试检索数据时出错。 当前上下文中不存在名称“t”
  • 听起来您的数据表是在内部范围内声明,然后在外部范围内访问。
  • 我已经更新了我的示例以将数据表移动到外部范围。
  • 我的查询:SELECT TOP 1 VAL0, VAL1, VAL2, VAL3, VAL4, VAL5 FROM tblLotto ORDER BY NEWID()
  • 不应该这样做,您应该能够访问数据表中的任何这些字段。再次更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多