【问题标题】:Trying to get results from a query in c#尝试从 C# 中的查询中获取结果
【发布时间】:2016-10-14 12:38:48
【问题描述】:

我正在尝试从多行中检索值。就像在 php 中你使用 odbc_fetch_row 和 obdc_result 一样。那是因为我想打印一张包含 2 个表格中的值的收据,但我不知道我应该做什么。 这是查询:

string query="SELECT * FROM faturas_online_detalhe WHERE cod_fatura='"+codfatura+"';";

编辑,添加到目前为止我已经拥有的代码:

        connection.Open();
        OleDbCommand comando2 = new OleDbCommand();
        comando2.Connection = connection;
        comando2.CommandText = "SELECT * FROM detalhe_faturas_online WHERE cod_fatura = '" + codfatura + "'; ";
        OleDbDataReader reader = comando2.ExecuteReader();
        string outValues = string.Empty;
        while (reader.Read())
        {
            outValues += string.Format("Column 1 = {0}, Column 2 = {1}, etc...", reader.GetString(0), reader.GetString(1));
        }
        Console.WriteLine(outValues);
        lst1.Items.Add(outValues);
        connection.Close();
        connection.Close();

编辑这里是数据库的样子:

【问题讨论】:

  • 请包含任何其他相关代码,以便我们至少可以看到您的进度。您应该使用连接对象、命令对象等...类似于SqlConnectionSqlCommand 或派生类。您还应该使用参数化查询而不是字符串连接。
  • 最重要的事情是首先建立与您的数据源的连接。如果您使用某种 ORM 框架或直接 DB 连接,则过程会有所不同
  • 编辑了,所以我给你看代码
  • 您应该使用ExecuteReader,然后您可以使用阅读器访问您的数据。
  • 我不知道为什么,但它已经开始工作了,现在我只需要隔离它,谢谢,+1!

标签: c# ms-access select


【解决方案1】:

您可能希望使用ExecuteReader 而不是ExecuteScalar。您将使用阅读器访问查询返回的表数据。我还建议使用参数化查询而不是字符串连接:

    connection.Open();
    OleDbCommand comando = new OleDbCommand();
    comando.Connection = connection;
    comando.CommandText = "SELECT * FROM faturas_online_detalhe WHERE cod_fatura= @parm1;";
    comando.Parameters.AddWithValue("@parm1", codfatura);
    OleDbReader reader = comando.ExecuteReader() ;
    string outValues = string.Empty;
    while(reader.Read())
    {
        outValues += string.Format("Column 1 = {0}, Column 2 = {1}, etc...", reader.GetString(0), reader.GetString(1));
    }
    Console.WriteLine(outValues);
    txtOutput.Text = outValues;
    reader.Close();
    connection.Close();

【讨论】:

  • 非常感谢!我正在处理您的代码以使其在我的程序中工作,再次感谢您! +1
  • 但是我才发现,当收据明细中有多个记录时,它不起作用
  • 你是什么意思?此代码将遍历查询返回的每条记录并打印内容。
  • 当我执行控制台写入时它甚至不显示任何内容
  • 您确定您正在执行的查询有数据吗?此外,这将有助于了解您的表结构是什么,以及一些示例数据是什么。如果您在代码中设置断点并检查codfatura 中的值是否有效,然后使用该值执行选择语句,您会得到任何数据吗?最好指定您的返回列而不是使用SELECT *
【解决方案2】:

SqlCommand.ExecuteScalar()

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

您可能想要ExecuteQuery()ExecuteReader() 之类的东西。请注意,这只是通过谷歌搜索“ExecuteScalar”找到的——这是第一个结果。不要害怕谷歌你的代码!

【讨论】:

  • 谢谢,我会的!我搜索的东西是标题,而不是代码本身,但我仍然无法弄清楚如何从查询中获取值,我可以用 1 列而不是多列来完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2017-07-11
相关资源
最近更新 更多