Oracle数据库多行-> c# [关闭]
Posted
技术标签:
【中文标题】Oracle数据库多行-> c# [关闭]【英文标题】:Oracle database multiple row -> c# [closed] 【发布时间】:2018-01-26 18:01:49 【问题描述】:如何使用 c#.net 从 oracle 数据库中检索多个数据行?并将数据行显示到列表框。
【问题讨论】:
允许发布您在 *** 上提出的问题的答案。但是您必须确保该问题以前没有被问过,并且您的答案是无懈可击的。否则,您应该考虑改用博客。 【参考方案1】:让我们重新编写您的代码:
// Extract methods, don't cram everything in OnClick
private void FeedFriendsListBox()
string oracleDb = @"connection string";
//DONE: wrap IDisposable into using
using (OracleConnection conn = new OracleConnection(oracleDb))
conn.Open();
//DONE: Make Sql readable - format it out and use names for the parameter(s)
string sql =
@"SELECT NAME,
ADDRESS
FROM FRIENDS
WHERE AGE = :prm _Age";
//DONE: wrap IDisposable into using
using (OracleCommand cmd = new OracleCommand(sql, conn))
cmd.Parameters.Add(new OracleParameter(txtlist.Text, OracleDbType.Decimal));
//DONE: wrap IDisposable into using
using (var reader = cmd.ExecuteReader())
if (!reader.HasRows)
listBox1.Text = "Not Found";
MessageBox.Show("Data Not found", "NOT FOUND",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
//DONE: Value is zero based
//DONE: use formatting (string interpolation), not concatenating
while (reader.Read())
listBox1.Items.Add($"reader.GetValue(0) from reader.GetValue(1)");
然后使用提取方法:
private void button2_Click(object sender, EventArgs e)
FeedFriendsListBox();
【讨论】:
【参考方案2】:private void button2_Click(object sender, EventArgs e)
//database connection string and opening area
string oracleDb = @"connection string";
OracleConnection conn = new OracleConnection(oracleDb);
conn.Open();
//declareing paramater and readning parameter input
OracleParameter param = new OracleParameter();
param.OracleDbType = OracleDbType.Decimal;
param.Value = txtlist.Text;
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
//sendting the parameter to the tabase query
cmd.Parameters.Add(param);
cmd.CommandText = "SELECT NAME, ADDRESS FROM FRIENDS WHERE age = :1";
cmd.CommandType = CommandType.Text;
OracleDataReader dataread = cmd.ExecuteReader();
dataread.Read();
if (dataread.HasRows)
while (dataread.Read())
listBox1.Items.Add(dataread.GetString(1) + " from " + dataread.GetString(2));
else
listBox1.Text = "Not Found";
MessageBox.Show("Data Not found", "NOT FOUND", MessageBoxButtons.OK, MessageBoxIcon.Information);
conn.Dispose();
【讨论】:
而且,即使您打算发布一个示例,您自己的答案也不应该被视为一个好的答案,因为这里有一个大问题。如果这段代码中某处发生异常会发生什么?您将保持连接打开且未处理,从而导致严重的资源泄漏。请理解 using 语句的工作原理。 刚刚看到另一个问题。您是否尝试过至少一次运行此代码?这段代码在第一个循环中就在你面前爆炸了。您检索了两列,然后在检索数据时使用了错误的索引。 IndexOutOfRangeException 将发生在 GetString(2)-以上是关于Oracle数据库多行-> c# [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将 C# 对象列表中的多行数据插入 Oracle 12 数据库中的表中
C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]
如何在 SQL Server CE 数据库中插入多行? [关闭]