我一直在努力想弄清楚为什么我的代码不起作用。 我试图从填充来自Access数据库的数据的DataSet中读取数据并将数据插入先前创建的Oracle数据库中。 当我尝试以下代码时,它将无法工作,虽然我使用try和catch块,但在调试时它会冻结并且不会向我显示任何错误。 如果可以看到我已经在我的foreach循环正上方注释了这个块...它完美地工作,非常感谢你的任何帮助:
private void button3_Click(object sender, EventArgs e)
{
string query1 = "Select * from Test;";
string StrQuery= "Insert Into TEST (ID, DATA) Values (:ID, :DATA)";
Conn = new OleDbConnection(connStr);
Conn.Open();
using (OleDbConnection connection1 = new OleDbConnection(connStr))
{
using (OleDbDataAdapter adapter1 = new OleDbDataAdapter(query1, connection1))
{
DataSet ds1 = new DataSet();
adapter1.Fill(ds1);
// no need for refilling DataGridView1.DataSource = ds.Tables[0]
// insterting the dataset into oracle
try
{
using (OracleConnection connect = new OracleConnection(oradb1))
{
connect.Open();
using (OracleCommand comma = new OracleCommand(StrQuery, connect))
{
/*comma.Parameters.Add(new OracleParameter(":ID", 2));
comma.Parameters.Add(new OracleParameter(":DATA", 2));
comma.ExecuteNonQuery();*/
foreach (DataRow drRow in ds1.Tables[0].Rows)
{
for (int i = 0; i < ds1.Tables[0].Columns.Count; i++)
{
comma.Parameters.Add(new OracleParameter(":ID", drRow[i]));
comma.Parameters.Add(new OracleParameter(":DATA", drRow[i]));
comma.ExecuteNonQuery();
}
}
connect.Close();
connect.Dispose();
}
}
}
catch (OracleException)
{
System.Diagnostics.Debugger.Break();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Conn.Close();
}
答案 0 :(得分:1)
您正在循环列,但在参数中添加了drRow [i]作为值。 我认为这不是你想要的。
跳过列循环并将第一列值添加到id,将第二列值添加到数据。 这应该是你想要的......如果没有,那么再描述一下......
答案 1 :(得分:0)
扩展Judgemaik的答案,我相信你需要做一些这样的事情(无法确切地说出访问表中列的名称是什么,但你明白了:
foreach (DataRow drRow in ds1.Tables[0].Rows)
{
comma.Parameters.Add(new OracleParameter(":ID", drRow["IDColumnFromAccessDB"]));
comma.Parameters.Add(new OracleParameter(":DATA", drRow["DATAColumnFromAccessDB"]));
comma.ExecuteNonQuery();
}
答案 2 :(得分:0)
我的回答here概述了类似的方法。在这种特殊情况下,我将数据从SQL Server Compact移动到Access中,但同样的想法很可能用于在任何两个OleDb数据源之间移动数据。
它使用OleDbDataAdapter
将源表拉入DataTable
,将其复制到另一个DataTable
,然后使用另一个OleDbDataAdapter
更新相应的表格目的地数据库。