今天数据库管理员说数据有重复 于是导出进行修改 用C#写了个命令行工具. 使用的是最笨的办法. 不过也是没办法的办法 整了一下午
特此记录 纪念曾经踩过的大坑.
一坑, 这个xls 需要用wps打开才能使用 这边打开那边跑程序 要不然会提示. 驱动错误.真实服了 难道是我看错了?
二坑, 一开始提示我 ""字段太小而不能接受所要添加的数据的数量的解决方案", \
我晕 我的是xls文件啊" 真坑的一比"后来把第一行数据设置很长后跑通了 简直是莫名其妙 xls文件也有字段长度了?
三坑
c# 的语法问题
string ss = "<br />";
string[] arr = s.Split(ss,StringSplitOptions.None); 这个是用来分割字符串为数组的语句
string s = string.Join("<br />", array); 这个是用来合并数组的例子
我一直以为我用的假的C# 真的 几年没用 怎么就变成这种奇怪的样子了
s.split("<br />")
arr.join("<br />")
这么简单的不好吗.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace fixDataTools
{
class Program
{
static void Main(string[] args)
{
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:/content2.xls;Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
//DataTable tb = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
//foreach (DataRow row in tb.Rows)
//{
// //遍历弹出各Sheet的名称
// Console.Write(row["TABLE_NAME"]);
//}
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet ds = new DataSet();
//将Excel中数据填充到数据集
objAdapter1.Fill(ds, "XLData");
OleDbCommandBuilder cb = new OleDbCommandBuilder(objAdapter1);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string s = ds.Tables[0].Rows[i][3].ToString();
if (s.Contains("【主要用途】")||s.Contains("【安全储运】")||s.Contains("【泄漏应急处置】"))
{
String[] ss = new string[]{"<br />"};
String[] array = s.Split(ss,StringSplitOptions.None);
for (int j = 0; j < array.Length; j++)
{
if (j < array.Length) {
if (array[j].Contains("【主要用途】"))
{
j++;
if (j + 1 < array.Length) {
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length) {
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length) {
array[j + 1] = "";
j++;
}
}
}
if (j < array.Length)
{
if (array[j].Contains("【安全储运】"))
{
j++;
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
}
}
if (j < array.Length)
{
if (array[j].Contains("【泄漏应急处置】"))
{
j++;
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
if (j + 1 < array.Length)
{
array[j + 1] = "";
j++;
}
}
}
}
s = string.Join("<br />", array);
}
addNewRows(s);
}
objConn.Close();
}
private static void addNewRows(string s)
{
s = s.Replace("(", "(");
s = s.Replace(")", ")");
s = s.Replace("'", "~");
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:/t1.xls;Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand cmd = new OleDbCommand("insert into [Sheet1$] values ('" + s +"')", objConn);
cmd.ExecuteNonQuery();
objConn.Close();
}
}
}