C#Windows Form使用OracleDataAdapter从System DataTable向Oracle表插入行

时间:2017-04-12 22:25:11

标签: c# oracle visual-studio

我正在编写一个填充DataTable的Windows窗体,我希望它插入到Oracle Table中。我在这里看到一些使用OracleDataAdapter执行此操作的示例,因此我不必遍历所有记录。代码没有任何错误但是当我使用Toad检查表时(我确实刷新了)我没有看到它。我用了下面的例子 Update and insert records into Oracle table using OracleDataAdapter from DataTable 以下是我的DataTable的制作方法:

result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
    @Override
    public void onResult(LocationSettingsResult result) {
      final Status status = result.getStatus();
      final LocationSettingsStates states = result.getLocationSettingsStates();
      // Call states.isBlePresent(), etc.

这就是我试图插入数据库的方式

    public DataTable dtMain = new DataTable();

    public void FillTable(DataTable dt)
    {
        dtMain.Columns.Add("SERIAL", typeof(System.String));
        dtMain.Columns.Add("LOCATION", typeof(System.String));
        dtMain.Columns.Add("UPC", typeof(System.String));
        dtMain.Columns.Add("PRODUCT", typeof(System.String));
        dtMain.Columns.Add("CREATED_BY", typeof(System.String));
        dtMain.Columns.Add("CREATED_DATE", typeof(System.DateTime));
        dtMain.Columns.Add("SKU", typeof(System.String));
        dtMain.Columns.Add("MAN_DATE", typeof(System.DateTime));
        dtUpload.Columns[0].Unique = true;
        dtMain.Merge(dt);

    }

}

如果有人可以给我一些很棒的指示,我已经谷歌搜索了2天,我只是想不通。我打赌这很简单

更新

感谢您的回复,我花了一点时间回到这个项目。当我发布这个时,我没有意识到我忘了包含我的select语句。

对于OracleParameter值,我认为使用SourceColumn会将该列用于值。

我确实更新了DataTable,其序列是唯一的。它仍然不插入数据。如果我包含Parameter.value,我会逐行循环来执行此操作吗?上面我用当前代码更正/更新了它。

第二次更新:

好的,我尝试循环遍历参数以添加DataTable中的值,没有错误但仍未插入数据库。我知道我的connectionstring是正确的,因为select查询有效。上面的代码已针对我所做的更改进行了更新。如果某位Oracle专家能够解决我的问题,那么虚拟的高五就等着他们。

2 个答案:

答案 0 :(得分:0)

我从未使用OracleDataAdapter但我看到了这些可能的问题:

  • 我认为您不能立即使用OracleDataAdapter,首先您必须从Oracle中选择一个现有的表,并根据此结果对其进行更新/插入/删除。你的strSelect字符串在哪里?我没有看到它。

  • 您创建了所有OracleParameter,但我没有看到您为其分配任何值,它们都是空的。在你做任何插入之前我会期待类似pOptoroLP.Value = ...;的东西。

  • 您应该定义一个唯一的resp。像dt.Columns["SERIAL"].Unique = true;这样的主键列,以便生成Update()Delete()。也许这不是Insert()所必需的,我不知道。

您是否按照Data Provider for .NET Developer's Guide

中的示例进行操作

答案 1 :(得分:0)

我终于找到了问题,DataTable中的行状态需要处于Added状态才能工作。如果其他人有这个问题,这是我的新代码,你可以将它与我想要做的事情进行比较。感谢Wernfried Domscheit的Oracle部分,但结果是我的DataTable是问题,虽然设置Unique列也可能是一个问题,我没有检查。 OracleCommandBuilder负责处理插入语句和参数。

sbt run