c# - 将数据库 mdb 导入 Sql Server 时出错

标签 c# sql-server sqlbulkcopy

您好,我在这个 c# 代码上有一个错误,我的代码有一个异常:MessageBox.Show("Salto sulla query 3 "+ex),但我不明白为什么,我加载了下面生成的异常图像,你能帮我吗,谢谢。

  MessageBox.Show("Aggiorno Articoli ");
                //APRO LA CONNESSIONE AL FILE 
                dbConn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" + dialog.FileName + "; Persist Security Info = False; Jet OLEDB:Database Password = " + textBoxPwdComet.Text + "; Mode = Share Deny None");
                //APRO LA CONNESSIONE
                SqlConnection conn = db.apriconnessione();
                //CREO LA TABELLA TEMPORANEA
                String QueryTemp = "CREATE TABLE TabellaTemp(CODMARCA varchar(MAX),CODART varchar(MAX),DESCR varchar(MAX),UM varchar(MAX),PRZNETTO money,PRZCASA money,DATAAGG datetime,);";
                SqlCommand cmdTemp = new SqlCommand(QueryTemp, conn);
                cmdTemp.ExecuteNonQuery();
                //COPIA DEI DATI NELLA TABELLA TEMPORANEA
                string query = "SELECT CODMARCA,CODART,DESCR,UM,PRZNETTO,PRZCASA,DATAAGG FROM ARTICOLI";
                OleDbDataAdapter da = new OleDbDataAdapter(query, dbConn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                SqlBulkCopy bulk = new SqlBulkCopy(conn);
                bulk.DestinationTableName = "TabellaTemp";
                bulk.WriteToServer(dt);
            //Setto tutti gli articoli come non disponbili(QUELLI COMET)
            try
            {
                String Query2 = "Update Articolo set Stato = 'Nondisponibile' where Importato = 'COMET' ";
                cmdTemp = new SqlCommand(Query2, conn);
                cmdTemp.ExecuteNonQuery();
            }

            catch(Exception ex)
            {
                MessageBox.Show("Salto su query 2");
            }
            //Aggiorno gli articoli, quelli che non vengono aggiornati non sono più disponbili

            try {
                String Query3 = "Update Articolo set Articolo.Stato = 'Disponibile',Articolo.Prezzo = TabellaTemp.PRZNETTO,Articolo.PrezzoListino = TabellaTemp.PRZCASA,Articolo.DataAggiornamento = TabellaTemp.DATAAGG,Articolo.Descrizione = TabellaTemp.DESCR,Articolo.UM = TabellaTemp.UM from Articolo inner join TabellaTemp on TabellaTemp.CodMarca = Articolo.CodMarca and TabellaTemp.CODART = Articolo.CodArt where Articolo.Importato = 'COMET' ";
                cmdTemp = new SqlCommand(Query3, conn);
                cmdTemp.ExecuteNonQuery();
            }

            catch(Exception ex)
            {
                MessageBox.Show("Salto sulla query 3 "+ex);
            }

                //FINE COPIA DATI TABELLA TEMPORANEA

                //ELIMINO LA TABELLA TEMPORANEA
                QueryTemp = "DROP TABLE TabellaTemp";
                cmdTemp = new SqlCommand(QueryTemp, conn);
                cmdTemp.ExecuteNonQuery();

                //FINE 
                conn.Close();

                MessageBox.Show("Aggiornamento Articoli terminato!! ");


                CaricamentoDataGridNonDisponbili();

异常(exception):

enter image description here

最佳答案

您的查询超时,即:未在默认 30 秒内完成。将 CommandTimeout 设置为更高的值并不是一个好的做法。要实际解决此问题,您需要为所有涉及的表提供表架构(如果有索引)。基于此,您需要使用适当的索引来优化查询以更快地运行。

关于c# - 将数据库 mdb 导入 Sql Server 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42583799/

相关文章:

sql - Redshift Copy 创建与分析不同的压缩编码

c# - 如何在 Linux 上使用 Mono 获取文件信息

sql-server - 如何从本地数据库查询带有巨大where子句的远程数据库

sql - OPENROWSET 查询相同服务器或不同服务器

sql - 如何在 SQL 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现

postgresql - 从 COPY 命令获取行数

c# - 将 csv 导入 SQL Server 的快速简单方法

c# - 什么是 xElement.Parse(字符串)的 .Net 2.0 等价物

c# - 多站点 C# 应用程序的双向复制存储类型是什么?

C# 相当于 std::sort 和 std::unique