Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自OracleDB的长查询_C#_Sql_Oracle - Fatal编程技术网

C# 来自OracleDB的长查询

C# 来自OracleDB的长查询,c#,sql,oracle,C#,Sql,Oracle,我已经创建了对oracle db的查询 Dictionary<decimal, decimal> Dict = new Dictionary<decimal, decimal>(); string strSelectIdWork = "SELECT COLUMN FROM my_tb WHERE ROW='" + Row + "'"; dataAdapter.Fill(ds, "my_tb"); foreach (DataRow row in ds.Tables["my_

我已经创建了对oracle db的查询

Dictionary<decimal, decimal> Dict = new Dictionary<decimal, decimal>();
string strSelectIdWork = "SELECT COLUMN FROM my_tb WHERE ROW='" + Row + "'";
dataAdapter.Fill(ds, "my_tb");
foreach (DataRow row in ds.Tables["my_tb"].Rows)
{
  foreach (DataColumn column in ds.Tables["my_tb"].Columns)
  {
    Dict.Add(Dict.Count + 1, Convert.ToDecimal(row[column]));
  }
}
foreach (decimal someVar in Dict.Values)
{
  OleDbCommand command = myAccessConn.CreateCommand();
  OleDbTransaction trans = myAccessConn.BeginTransaction();
  command.Transaction = trans;
  command.CommandText = "SELECT COLUMN FROM my_tb2 WHERE ROW='" + someVar + "'";
  command.ExecuteNonQuery();
  nb = Convert.ToString(command.ExecuteScalar());
  comboBox2.Items.Add(nb;
  trans.Commit();
}
它正在工作,但执行起来需要很长时间,而且我的函数中有很多查询。
如何更改代码以缩短请求时间?

我不太确定您想要实现什么,但您是否意识到您正在与数据库建立无数连接

foreach (decimal someVar in Dict.Values)
{
  OleDbCommand command = myAccessConn.CreateCommand();
  OleDbTransaction trans = myAccessConn.BeginTransaction();
  command.Transaction = trans;
  command.CommandText = "SELECT COLUMN FROM my_tb2 WHERE ROW='" + someVar + "'";
  command.ExecuteNonQuery();
  nb = Convert.ToString(command.ExecuteScalar());
  comboBox2.Items.Add(nb;
  trans.Commit();
}
无论此查询返回的行总数是多少

"SELECT COLUMN FROM my_tb WHERE ROW='" + Row + "'"
将相当于您将打开的数据库连接总数…更不用说您将打开的事务总量了。您真的需要为此select查询运行事务吗

为什么不将所有字典值检索到一个数组中

var values = Dict.Values.ToArray();
然后将值连接到CSV字符串中

var @param = string.Join(",", values);
并将此@params字符串传递给IN子句


为了清楚起见,我省略了一些细节,但如果您需要一些澄清,请告诉我

在这种情况下,您确实需要使用绑定变量。Oracle将把您的每次查询解析为一个全新的查询,这将大大降低速度。我不是开发人员,所以我无法告诉您如何将其应用于C,但您应该先阅读这篇关于以下主题的有用文章:


你想做什么,你能用文字描述一下吗?这看起来像是你可以在一个查询中做的事情,但是,正如建议的那样,实际描述你想实现的目标,而不是期望我们在没有注释的复杂代码中计算出来,这将是一个好主意。用户选择word=Row;PROGRAM get request to table,其中ROW=user word,然后PROGRAM get request to另一个表,其中包含来自第一个查询的数据。在ComboBox中添加第二个数据,明白吗?
command.CommandText = "SELECT COLUMN FROM my_tb2 WHERE ROW IN(" + @param + ")";
var reader = command.ExecuteReader();

while(reader.Read())
{
    comboBox2.Items.Add(reader["COLUMN"].ToString());
}