【问题标题】:Load data from database with gui c# and use SqlDataReader.ExecuteReader() twice使用 gui c# 从数据库加载数据并使用 SqlDataReader.ExecuteReader() 两次
【发布时间】:2015-12-03 18:46:51
【问题描述】:

我对 C# 和编码非常陌生,所以希望您能耐心等待我。 :)

我正在使用 Visual Studio 2013,我建立了我的数据库连接并且它工作正常。我明天将发布我的代码,但这里是我的第一个示例:

sSQL = "select person_id from person where person_email_adress = "+ email;
cmd.CommandText = sSQL
cmd.CommandType = CommandType.Text; 
OracleDataReader dr = cmd.ExecuteReader();

while(dr.Read()){
   person_id = dr.GetString(0)
}

这很好,但我的问题在于第二个 SQL 命令:

sSQL = "select article from purchase where person_id = "+ person_id;
cmd.CommandText = sSQL
cmd.CommandType = CommandType.Text; 
OracleDataReader dr = cmd.ExecuteReader();

while(dr.Read()){
   // random stuff
}

我的问题是,我的第二个 SqlDataReader 没有返回任何行,但如果我在 SQLDeveloper 中使用相同的 person_id 运行相同的查询,我会得到超过 10 个命中。

我知道dr.Read() 是空的,因为我做了以下事情:

if(!dr.HasRow) {
    MessageBox.text("This query is empty");
} else {
    MessageBox.text("This query got some hit");
}

我想进去看看这些行,但我总是遇到问题,dr 是空的。

我还使用MessageBox 检查了 SQL 输出是否正确,并且正确。

现在呢?

我希望您能理解我糟糕的英语,如果您有任何问题,我随时为您服务。 :)

感谢和问候,

Xplosio

【问题讨论】:

  • 您是否在调试器中逐行运行它以确保 person_id 具有您期望的值?
  • 是的,它给了我我期望的价值 (10369)
  • 你应该在阅读后关闭OracleDataReader:dr.Close();

标签: c# sql oracle connection


【解决方案1】:

首先我会逐行调试以确保person_id 具有您期望的值。

其次,我会更改两个查询以使用参数:

sSQL = "select article from purchase where person_id = :person_id";
cmd.CommandText = sSQL
cmd.CommandType = CommandType.Text; 
cmd.Parameters.Add(new OracleParameter("person_id", person_id))
OracleDataReader dr = cmd.ExecuteReader();

while(dr.Read()){

   // random stuff

}

【讨论】:

  • 啊这就是你在c#中使用参数的方式。谢谢 :) 我只知道 java 中带有问号,但我认为这对我没有帮助,因为我的问题是,我得到了正确的参数(我检查了很多次,因为我也认为 person_id是错的,但不是)
  • 因此,如果查询正确且参数值正确 - 唯一可能的原因是您正在查询不同的数据库。
  • 天哪……你是对的……我访问了错误的数据库。非常感谢,抱歉
  • 不用担心 - 有时需要第二眼才能看到问题。很高兴你明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多