从 DataTable C# 添加到 OLE 类型表

     2023-05-07     287

关键词:

【中文标题】从 DataTable C# 添加到 OLE 类型表【英文标题】:Adding to OLE type table from DataTable C# 【发布时间】:2017-01-30 18:28:37 【问题描述】:

我正在尝试使用来自 DataTable 对象的集合 DataRows 将数据添加到 Access 表中,并在查看器中看到一组很好的数据 (43) 记录,但它填充了相同的记录 43 次。我的参数设置错误还是我做错了什么?

private void PopulateDB(DataTable dtDB)
    
        lblDataStatus.Text = "populating master table...";
        this.Refresh();
        progressBar1.Visible = true;
        progressBar1.Value = 1;
        progressBar1.Maximum = dtDB.Rows.Count;
        string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\path\fname.accdb";
        using (OleDbConnection conn = new OleDbConnection (strConn ))
        
            using (OleDbCommand cmd = new OleDbCommand())
            
                foreach (DataRow dr in dtDB .Rows)
                
                    progressBar1.PerformStep();
                try
                
                    cmd.CommandText = "INSERT INTO PMADocMaster( PN, PNNewRev, PN8Digit, ECO, Mon, SupNum, URL ) VALUES (?,?,?,?,?,?,?)";
                    cmd.Parameters.Add("@pn", OleDbType.VarChar).Value = dr.Field<string>("PNFullNum");
                    cmd.Parameters.Add("@rev", OleDbType.VarChar).Value = dr.Field<string>("PNNewRev");
                    cmd.Parameters.Add("@pn8", OleDbType.VarChar).Value = dr.Field<string>("PN8Dig");
                    cmd.Parameters.Add("@eco", OleDbType.VarChar).Value = dr.Field<string>("ECO");
                    cmd.Parameters.Add("@mon", OleDbType.VarChar).Value = dr.Field<string>("Mon");
                    cmd.Parameters.Add("@supnum", OleDbType.VarChar).Value = dr.Field<string>("SupNum");
                    cmd.Parameters.Add("@url", OleDbType.VarChar).Value = dr.Field<string>("URL");
                    cmd.Connection = conn;
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                
                catch (Exception e)
                
                    MessageBox.Show("Error: " + e.Message);
                    lblDataStatus.Text = e.Message;
                    return;
                    // duplicates are happening, will check veracity of data afterwards
                
                
                progressBar1.Visible = false;
            
        
    

【问题讨论】:

如果您使用 DataAdapter,它将为您完成所有更新。从 DataTable 中提取数据以发送到 DB 是相当奇怪的 【参考方案1】:

您可以使用 cmd.Parameters.clear() 或优化您的代码,如下所示..

private void PopulateDB(DataTable dtDB)
    
        lblDataStatus.Text = "populating master table...";
        this.Refresh();
        progressBar1.Visible = true;
        progressBar1.Value = 1;
        progressBar1.Maximum = dtDB.Rows.Count;
        string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\path\fname.accdb";
        using (OleDbConnection conn = new OleDbConnection(strConn))
        
            using (OleDbCommand cmd = new OleDbCommand("INSERT INTO PMADocMaster( PN, PNNewRev, PN8Digit, ECO, Mon, SupNum, URL ) VALUES (?,?,?,?,?,?,?)",conn))
            
                try
                
                    cmd.Parameters.Add("@pn");, OleDbType.VarChar);
                    cmd.Parameters.Add("@rev", OleDbType.VarChar);
                    cmd.Parameters.Add("@pn8", OleDbType.VarChar);
                    cmd.Parameters.Add("@eco", OleDbType.VarChar);
                    cmd.Parameters.Add("@mon", OleDbType.VarChar);
                    cmd.Parameters.Add("@supnum", OleDbType.VarChar);
                    cmd.Parameters.Add("@url", OleDbType.VarChar);
                    conn.Open();
                    foreach (DataRow dr in dtDB.Rows)
                    
                        progressBar1.PerformStep();

                        cmd.Parameters["@pn"].Value = dr.Field<string>("PNFullNum");
                        cmd.Parameters["@rev"].Value = dr.Field<string>("PNNewRev");
                        cmd.Parameters["@pn8"].Value = dr.Field<string>("PN8Dig");
                        cmd.Parameters["@eco"].Value = dr.Field<string>("ECO");
                        cmd.Parameters["@mon"].Value = dr.Field<string>("Mon");
                        cmd.Parameters["@supnum"].Value = dr.Field<string>("SupNum");
                        cmd.Parameters["@url"].Value = dr.Field<string>("URL");
                        cmd.ExecuteNonQuery();
                    

                    conn.Close();
                
                catch (Exception e)
                
                    MessageBox.Show("Error: " + e.Message);
                    lblDataStatus.Text = e.Message;
                    return;
                    // duplicates are happening, will check veracity of data afterwards
                
                progressBar1.Visible = false;
            
        
    

【讨论】:

在 c# 中可以添加到 DataTable 的行数是不是有限制?

】在c#中可以添加到DataTable的行数是不是有限制?【英文标题】:IstherealimittothenumberofrowsthatcanbeaddedtoaDataTableinc#?在c#中可以添加到DataTable的行数是否有限制?【发布时间】:2016-01-0118:57:10【问题描述】:我正在从excel文件中获取... 查看详情

c#怎么讲datatable导出到excel

用NOPI,其实Excel文件也是有一定格式的,office只是能对这种格式准确地进行读写。那么,NOPI也是能对Excel进行操作,不依赖于电脑是的Excel软件。它也定义了sheet,workbook,cell,row,column等对象,方便操作Excel对象,sheet表单,单元格,... 查看详情

在 C# 中将数据加载到 DataTable 会出现“未知 SQL 类型 - 0”错误

】在C#中将数据加载到DataTable会出现“未知SQL类型-0”错误【英文标题】:LoadingdatatoDataTableinC#gives"UnknownSQLtype-0"error【发布时间】:2018-11-2814:28:38【问题描述】:我已经成功地使用以下代码将数据从ODBC连接加载到C#DataTable... 查看详情

从 C# .NET 中的 DataTable 到 JSON

】从C#.NET中的DataTable到JSON【英文标题】:FromDataTableinC#.NETtoJSON【发布时间】:2011-01-1918:10:16【问题描述】:我是C#和.NET的新手,但我已经编写了这段代码来调用存储过程,然后我想获取返回的DataTable并将其转换为JSON。SqlConnection... 查看详情

c#从数据表中求和相同间隔、日期和类型的值

...型的值【英文标题】:c#Sumvaluesofsameintervalanddateandtypefromdatatable【发布时间】:2021-02-0301:44:30【问题描述】:输入我有一个DataTable,其结构如下(带有一些示例值):输出我想要一个像这样的DataTable来保存计算结果:变换逻辑我... 查看详情

C# 如何从存储在数据库中的 OLE 对象中保存图像

】C#如何从存储在数据库中的OLE对象中保存图像【英文标题】:C#HowtosaveimagefromanOLEObjectstoredinaDatabase【发布时间】:2011-07-1415:24:37【问题描述】:当它作为OLE对象嵌入到访问数据库中时,标题字节似乎与图像一起存储,并且它们... 查看详情

由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?

...于使用自动增量添加到表中,如何使用更新的数据刷新C#DataTable?【英文标题】:HowtorefreshaC#DataTablewithupdateddataduetoaddingtotablewithautoincrement?【发布时间】:2015-03-2321:40:52【问题描述】:将数据推送到数据库后,如何用新更新的数... 查看详情

解决从excel导入数据库,导入到datatable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)

做项目的时候,C#读取Excel数据到DataTable或者DataSet,设断点查看DataTable,发现Excel的显示为较长位数数字的字段如0.000012在DataTable中显示为科学计数法1.2E-05,而百分数如143%在DataTable中显示为1.43。可是我想Excel中显示的是什么数据... 查看详情

c#如何从datatable中取出某列的值并去除这一列的相同值,并将这列添加到新的表中

...");dt.Rows.Add("小三3");DataViewdv=dt.DefaultView;//新表DataTabledtNew=newDataTable("new");//过滤相同值放入新表中本回答被提问者采纳 查看详情

Winforms C#:从远程计算机文件夹获取图像并加载到 DataTable 的列中

】WinformsC#:从远程计算机文件夹获取图像并加载到DataTable的列中【英文标题】:WinformsC#:GetimagefromremotecomputerfolderandloadintoDataTable\'scolumn【发布时间】:2017-12-2119:40:21【问题描述】:我有一台远程计算机,它在一个文件夹中存储... 查看详情

从 C# 如何调用需要 *VARIANT 参数的非托管 OLE 接口?

】从C#如何调用需要*VARIANT参数的非托管OLE接口?【英文标题】:FromC#howdoIcallanunmanagedOLEinterfacethatrequiresa*VARIANTparameter?【发布时间】:2017-01-0522:21:03【问题描述】:我试图从C#调用用C++编写的OLE接口。C++代码的.ODL文件的签名是:l... 查看详情

c#中datatable怎么添加列名

DataTablemyDt=dt;//删除列myDt.Columns.Remove("minArea");myDt.Columns.Remove("maxArea");//调整列顺序,列排序从0开始myDt.Columns["num"].SetOrdinal(1);//修改列标题名称,根据列数更改列名dt.Columns[0].ColumnName参考技术ADataTabledt=newDataT... 查看详情

跳过第一个单元格和最后一个单元格 - 使用 Open XML 从 Excel 到 C# 中的 DataTable

...第一个单元格和最后一个单元格-使用OpenXML从Excel到C#中的DataTable【英文标题】:Skipfirstcell&lastcell-FromExceltoDataTableinC#withOpenXML【发布时间】:2016-11-2418:41:54【问题描述】:我已经实现了这里提到的代码:FromExceltoDataTableinC#withOpe... 查看详情

如何从文本框中获取数据并将其添加到 dataTable?

】如何从文本框中获取数据并将其添加到dataTable?【英文标题】:HowgetDatafromatextboxandaddittodataTable?【发布时间】:2016-08-2714:54:04【问题描述】:我正在尝试从文本中获取信息,例如:“姓名、号码等”;并将该信息添加到我的数... 查看详情

将 DataTable 从一个 DataSet 复制到另一个

】将DataTable从一个DataSet复制到另一个【英文标题】:CopyDataTablefromoneDataSettoanother【发布时间】:2011-06-2106:58:36【问题描述】:我正在尝试向新数据集X添加一个位于不同数据集Y内的数据表。如果我直接添加它,我会收到以下错误... 查看详情

SQL/C#:DataTable 到存储过程(从用户定义的表类型插入)- 转换错误

】SQL/C#:DataTable到存储过程(从用户定义的表类型插入)-转换错误【英文标题】:SQL/C#:DataTabletostoredprocedure(INSERTfromuser-definedtabletype)-Convertingerror【发布时间】:2021-11-1020:45:56【问题描述】:我正在尝试将我的DataTable传递给存储... 查看详情

从 javascript 将迷你图饼图添加到 Jquery DataTable

】从javascript将迷你图饼图添加到JqueryDataTable【英文标题】:AddsparklinespiecharttoJqueryDataTablefromjavascript【发布时间】:2021-08-1909:40:21【问题描述】:我正在尝试使sparklines饼图在JQueryDatatables中动态呈现。我可以像这样将JQuerysparklines... 查看详情

将样式单元格从数据库添加到 DataTable

】将样式单元格从数据库添加到DataTable【英文标题】:AddstylecelltoDataTablefromdatabase【发布时间】:2021-09-2013:00:08【问题描述】:我正在尝试根据通话状态为我的单元格添加样式。一个呼叫可以具有以下状态之一:新待定已取消确... 查看详情