选择并插入命令OLEDB命令c#

本文关键字:命令 OLEDB 插入 选择 | 更新日期: 2023-09-27 17:50:55

我有一个有两个选项卡的excel表,所以我想从一个选项卡中获得一行并插入另一个,我认为它会像在sqlserver或mysql一样。选择并插入…

我正在使用这个查询,但它说语法错误,不确定其中有什么问题。

  testCommand.CommandText = "Insert into [ActiveLicenses$]( Select * from [companies$] 
                             where [License Number] = '" + lnumber + "')";
  testCommand.ExecuteNonQuery();

是否有任何方法可以直接从excel表中删除行?

选择并插入命令OLEDB命令c#

您可以使用SQL从Excel中提取数据:

     using (OleDbDataAdapter da = new OleDbDataAdapter(
     "SELECT " + columns + " FROM [" + worksheetName + "$]", conn))
     {
       DataTable dt = new DataTable(tableName);
       da.Fill(dt);
       ds.Tables.Add(dt);
     }

不幸的是,插入到excel中不是这样工作的。我很确定你不能指定一个单元格写入使用OleDb插入命令,它会自动转到指定列的下一个打开行。您可以使用update语句来解决这个问题:

sql = "Update [Sheet1$A1:A10] SET A10 = 'YourValue'"; 
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();

我个人会使用VSTO而不是oleDB。提取单元格后,只需用代码打开电子表格并插入数据:

Excel.Workbook wb = xlApp.Workbooks.Open(filePath);
rng = wb.Range["A1"];
rng.Value2 = "data";

更快的方法。

我将所有许可证放入DataTable中,删除不需要的许可证需要不到1分钟。然后简单地将DataTable导出为Csv,这样我就可以在不到1分钟内准备好文件。

样本如下:

static List<string> licensecAll = new List<string>();
DataTable dt = new DataTable();
            OleDbDataAdapter dp = new OleDbDataAdapter("select * from [companies$]", testCnn);
            dp.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                for (int i = dt.Rows.Count-1; i >= 0; i--)
                {
                    string lnum = dt.Rows[i][0].ToString();
                    Console.WriteLine("LICENSE NUMBER" + lnum);
                    if (!licensecAll.Contains(lnum))
                    {
                        Console.WriteLine("ROW REMOVED");
                        dt.Rows.RemoveAt(i);
                    }
                }
            }

然后简单地运行datatable到csv....

  public static void DataTable2CSV(DataTable table, string filename, string seperateChar)
    {
        StreamWriter sr = null;
        try
        {
            sr = new StreamWriter(filename);
            string seperator = "";
            StringBuilder builder = new StringBuilder();
            foreach (DataColumn col in table.Columns)
            {
                builder.Append(seperator).Append(col.ColumnName);
                seperator = seperateChar;
            }
            sr.WriteLine(builder.ToString());
            foreach (DataRow row in table.Rows)
            {
                seperator = "";
                builder = new StringBuilder();
                foreach (DataColumn col in table.Columns)
                {
                    builder.Append(seperator).Append(row[col.ColumnName]);
                    seperator = seperateChar;
                }
                sr.WriteLine(builder.ToString());
            }
        }
        finally
        {
            if (sr != null)
            {
                sr.Close();
            }
        }
    }