Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 如何将数据从DataTable插入Oracle数据库表:_C#_Asp.net - Fatal编程技术网

C# 如何将数据从DataTable插入Oracle数据库表:

C# 如何将数据从DataTable插入Oracle数据库表:,c#,asp.net,C#,Asp.net,我在DataTable中有两行三列的数据。我想将该数据插入到Oracle表中 如何插入?请给我举个例子 而且 如何将datatable传递到ORACLE中的StoredProcess 我以如下方式传递数据表,但数据表类型问题正在出现。我怎样才能解决这个问题 cmd.Parameters.Add("@Details",dtSupplier); (OR) cmd.Parameters.Add("Details", DbType.Single).Value = dtSupplier.ToSt

我在
DataTable
中有两行三列的数据。我想将该数据插入到
Oracle
表中

如何插入?请给我举个例子

而且

如何将datatable传递到ORACLE中的StoredProcess

我以如下方式传递数据表,但数据表类型问题正在出现。我怎样才能解决这个问题

cmd.Parameters.Add("@Details",dtSupplier);   
(OR)  
cmd.Parameters.Add("Details", DbType.Single).Value = dtSupplier.ToString();

最好的办法是遵循下面提到的步骤

  • 创建事务
  • 开始交易
  • 循环遍历数据表
  • 调用您的程序
  • 如果没有发生错误,则提交事务
  • else回滚事务

  • 最好的办法是遵循下面提到的步骤

  • 创建事务
  • 开始交易
  • 循环遍历数据表
  • 调用您的程序
  • 如果没有发生错误,则提交事务
  • else回滚事务

  • 关于你问题的这一部分:

    cmd.Parameters.Add(“@Details”,dtSupplier)
    (或)
    cmd.Parameters.Add(“Details”,DbType.Single).Value=dtSupplier.ToString()

    “详细信息”参数的类型是什么?是单人房吗?然后,您必须从数据表中选择一(1)个值并将其传递给参数,例如dtSupplier.Rows[0][“col”]。

    如果您使用dtSupplier.ToString(),您只是在生成整个DataTable的字符串(我猜它将始终是DataTable的类型名称)。

    关于问题的这一部分:

    cmd.Parameters.Add(“@Details”,dtSupplier)
    (或)
    cmd.Parameters.Add(“Details”,DbType.Single).Value=dtSupplier.ToString()

    “详细信息”参数的类型是什么?是单人房吗?然后,您必须从数据表中选择一(1)个值并将其传递给参数,例如dtSupplier.Rows[0][“col”]。

    如果您使用dtSupplier.ToString(),您只是在生成整个DataTable的字符串(我猜它将始终是DataTable的类型名)。

    要将dataset或DataTable插入ORACLE

  • 创建ORACLE数据适配器
  • 创建用于插入的命令对象
  • 将CommandType设置为StoredProcedure
  • 更新数据适配器的命令
  • 将数据集或数据表作为参数传递
  • 像这样:

    OracleDataAdapter da = new OracleDataAdapter();
    OracleCommand cmdOra = new OracleCommand(StoredProcedureName, Connection);
    cmdOra.CommandType = CommandType.StoredProcedure;
    
    da.InsertCommand = cmdOra;
    da.Update(dsDataSet);
    

    如果上述方法不起作用,则将datatable作为xml参数传递,而不是处理它

    详情请参阅:

    在Oracle站点上检查此线程:


    检查现有答案:

    要将数据集或数据表插入ORACLE

  • 创建ORACLE数据适配器
  • 创建用于插入的命令对象
  • 将CommandType设置为StoredProcedure
  • 更新数据适配器的命令
  • 将数据集或数据表作为参数传递
  • 像这样:

    OracleDataAdapter da = new OracleDataAdapter();
    OracleCommand cmdOra = new OracleCommand(StoredProcedureName, Connection);
    cmdOra.CommandType = CommandType.StoredProcedure;
    
    da.InsertCommand = cmdOra;
    da.Update(dsDataSet);
    

    如果上述方法不起作用,则将datatable作为xml参数传递,而不是处理它

    详情请参阅:

    在Oracle站点上检查此线程:


    检查现有答案:

    首先,您需要添加
    Oracle.DataAccess.dll
    作为Visual Studio中的参考。在大多数情况下,您可以在目录
    C:\ProgramData\Oracle11g\product\11.2.0\client\u 1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

    如果只需要将记录从DataTable插入到Oracle表,那么可以调用下面的函数。考虑您的DATABATE名称是“代码> Dt< /Calp>”< /P>
    string error = "";
    int noOfInserts = DataTableToTable(dt,out error);
    
    1。不使用Oracle参数(特殊字符非安全)

    下面给出了该函数的定义。这里,我们只是将查询动态化,以便将其作为sql语句传递给
    InsertWithQuery
    函数

    public int DataTableToTable(DataTable dt,out string error)
    {
        error = "";
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            finalSql = "INSERT INTO TABLENAME SELECT ";
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                colValue += "'" + dt.Rows[i][j].ToString() + "',"; 
            }
            colValue = colValue.Remove(colValue.Length - 1, 1);
            finalSql += colValue + " FROM DUAL";
            InsertWithQuery(finalSql, out error);
            if (error != "")
               return error;
            inserts++;
            colValue = "";
        }
    }
    
    2。使用Oracle参数(特殊字符安全)
    这可以处理特殊字符,例如列值中的单引号场景

    public int DataTableToTable(DataTable dt,out string error)
    {
        error = "";
        string finalSql = "";
        List<string> colValue = new List<string>();
        List<string> cols = new List<string>() {"COLUMN1","COLUMN2","COLUMN3"};
        for (int i = 0; i < dt.Rows.Count; i++)
        {
             finalSql = "INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3) VALUES(:COLUMN1,:COLUMN2,:COLUMN3) ";                    
             for (int j = 0; j < dt.Columns.Count; j++)
             {
                 colValue.Add(dt.Rows[i][j].ToString());
             }                     
             objDAL.InsertWithParams(finalSql,colValue,cols, out error);
             if (error != "")
                 return error;
             inserts++;
             colValue.Clear();
        }
    }
    

    首先,您需要在VisualStudio中添加
    Oracle.DataAccess.dll
    作为引用。在大多数情况下,您可以在目录
    C:\ProgramData\Oracle11g\product\11.2.0\client\u 1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

    如果只需要将记录从DataTable插入到Oracle表,那么可以调用下面的函数。考虑您的DATABATE名称是“代码> Dt< /Calp>”< /P>
    string error = "";
    int noOfInserts = DataTableToTable(dt,out error);
    
    1。不使用Oracle参数(特殊字符非安全)

    下面给出了该函数的定义。这里,我们只是将查询动态化,以便将其作为sql语句传递给
    InsertWithQuery
    函数

    public int DataTableToTable(DataTable dt,out string error)
    {
        error = "";
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            finalSql = "INSERT INTO TABLENAME SELECT ";
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                colValue += "'" + dt.Rows[i][j].ToString() + "',"; 
            }
            colValue = colValue.Remove(colValue.Length - 1, 1);
            finalSql += colValue + " FROM DUAL";
            InsertWithQuery(finalSql, out error);
            if (error != "")
               return error;
            inserts++;
            colValue = "";
        }
    }
    
    2。使用Oracle参数(特殊字符安全)
    这可以处理特殊字符,例如列值中的单引号场景

    public int DataTableToTable(DataTable dt,out string error)
    {
        error = "";
        string finalSql = "";
        List<string> colValue = new List<string>();
        List<string> cols = new List<string>() {"COLUMN1","COLUMN2","COLUMN3"};
        for (int i = 0; i < dt.Rows.Count; i++)
        {
             finalSql = "INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3) VALUES(:COLUMN1,:COLUMN2,:COLUMN3) ";                    
             for (int j = 0; j < dt.Columns.Count; j++)
             {
                 colValue.Add(dt.Rows[i][j].ToString());
             }                     
             objDAL.InsertWithParams(finalSql,colValue,cols, out error);
             if (error != "")
                 return error;
             inserts++;
             colValue.Clear();
        }
    }
    
    试试看{
    //假设您有DataTable dt
    字符串连接字符串=@“Provider=Microsoft.ACE.OLEDB.12.0;”+
    @“Data Source='此处给出access数据库文件的路径';Persist Security Info=False”;
    OLEDB连接dbConn=新的OLEDB连接(connectionString);
    dbConn.Open();
    使用(dbConn)
    {
    int j=0;
    对于(int i=0;i<2;i++)
    {
    OleDbCommand cmd=新的OleDbCommand(
    “将值(@c1、@c2、@c3)插入参与者_档案([column1]、[column2]、[column3]),dbConn);
    cmd.Parameters.AddWithValue(“@c1”,dt.rows[i][j].ToString());
    cmd.Parameters.AddWithValue(“@c2”,dt.rows[i][j].ToString());
    cmd.Parameters.AddWithValue(“@c3”,dt.rows[i][j].T