C# CSV 导入数据库
做个导入CSV到MSSQL数据库的工具,数据每行都要处理验证,使用的线程池,但是发现只有一个线程的效果,不明为何,求大神指点
这是button点击事件
这是数据处理和写入数据库方法
这是button点击事件
for (int i = 0; i < 5; i++)
{
string[] files = list[i].ToArray<string>();
ThreadPool.QueueUserWorkItem(p =>
{
foreach (string file in files)
{
string[] temp = file.Split('\\');
string name = temp[temp.Length - 1].Replace(".csv", "");
int count = 0;
operateCSV.readCsvTxt(file, name, dataType, "Quotes", out count);
//MessageShow(name + " " + count.ToString() + " " + fileCount++);
}
});
}这是数据处理和写入数据库方法
/// <summary>
/// 读取CSV文件通过文本格式
/// </summary>
/// <param name="strpath"></param>
/// <returns></returns>
public static void readCsvTxt(string strpath, string code, string dataType, string tableName, out int count)
{
string strline;
string[] aryline;
System.IO.StreamReader mysr = new System.IO.StreamReader(strpath);
string sqlStr = "Data Source=localhost;Initial Catalog=StockDataDB;Integrated Security=True";
//数据库
SqlConnection conn = new SqlConnection(sqlStr);
conn.Open();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
count = 0;
while ((strline = mysr.ReadLine()) != null)
{
aryline = strline.Split(',');
if(aryline[0] == "\"\"")
{
continue;
}
bool isNull = HasNull(aryline);
if (!isNull)
{
continue;
}
string Code = code;
string DataType = dataType;
DateTime dtime = Convert.ToDateTime(aryline[1]);
int Year = dtime.Year;
int Quarter = GetQuarterByMonth(dtime.Month);
int Month = dtime.Month;
int Week = WeekOfYear(dtime);
int Day = dtime.Day;
DateTime DATETIME = dtime;
double OPEN = Convert.ToDouble(aryline[2]);
double HIGH = Convert.ToDouble(aryline[3]);
double LOW = Convert.ToDouble(aryline[4]);
double CLOSE = Convert.ToDouble(aryline[5]);
double VOLUME = Convert.ToDouble(aryline[6]);
double Amount = Convert.ToDouble(aryline[7]);
//Data Source=KOBE;Initial Catalog=StockDataDB;Integrated Security=True
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO [" + tableName + "] ([Code],[DataType], [Year], [Quarter], [Month], [Week], [Day], [DATETIME], [OPEN], [HIGH], [LOW], [CLOSE], [VOLUME], [Amount]) VALUES (@Code,@DataType, @Year, @Quarter, @Month, @Week, @Day, @DATETIME, @OPEN, @HIGH, @LOW, @CLOSE, @VOLUME, @Amount)";
//添加参数
SqlParameter p = cmd.Parameters.Add("Code", SqlDbType.Char);
p.Value = Code;
p = cmd.Parameters.Add("DataType", SqlDbType.Char);
p.Value = DataType;
p = cmd.Parameters.Add("Year", SqlDbType.Int);
p.Value = Year;
p = cmd.Parameters.Add("Quarter", SqlDbType.Int);
p.Value = Quarter;
p = cmd.Parameters.Add("Month", SqlDbType.Int);
p.Value = Month;
p = cmd.Parameters.Add("Week", SqlDbType.Int);
p.Value = Week;
p = cmd.Parameters.Add("Day", SqlDbType.Int);
p.Value = Day;
p = cmd.Parameters.Add("DATETIME", SqlDbType.DateTime);
p.Value = DATETIME;
p = cmd.Parameters.Add("OPEN", SqlDbType.Float);
p.Value = OPEN;
p = cmd.Parameters.Add("HIGH", SqlDbType.Float);
p.Value = HIGH;
p = cmd.Parameters.Add("LOW", SqlDbType.Float);
p.Value = LOW;
p = cmd.Parameters.Add("CLOSE", SqlDbType.Float);
p.Value = CLOSE;
p = cmd.Parameters.Add("VOLUME", SqlDbType.Float);
p.Value = VOLUME;
p = cmd.Parameters.Add("Amount", SqlDbType.Float);
p.Value = Amount;
//执行
count += cmd.ExecuteNonQuery();
}
conn.Close();
mysr.Close();
}
...全文
相关推荐
C#写的将csv文件导入至sql数据库,带存储过程的实例
本实例聚焦于使用C#编程语言将CSV(逗号分隔值)文件的数据高效地导入到SQL数据库中,同时利用存储过程来优化这一过程。CSV文件因其简单易用、通用性强的特点,被广泛用于数据交换。
C#从CSV文件批量导入数据保存到数据库
在C#编程中,批量导入CSV数据到数据库是一项常见的任务,尤其在数据分析、报表生成或系统集成等场景中。下面将详细阐述这个过程中的关键知识点,包括数据读取、列名映射、数据验证和数据库操作。
C# WINFORM 操作Sql Server 数据库,xls csv txt 导入导出
本主题聚焦于如何利用C# WinForm实现对SQL Server数据库的交互,并且支持Excel(xls)、CSV和TXT文件的导入导出。
CSACC:解析[HoliddayWorkPlan WeekdayRestPlan]请求文档。 (.csv-> DB(访问))
接下来,我们将数据从CSV文件导入到数据库。在C#中,这通常通过ADO.NET(一个用于访问数据库的.NET框架组件)实现。
C# 写的数据导入ORACLE数据库
总的来说,通过C#和Oracle的结合,我们可以构建强大的数据导入工具,实现从各种数据源高效地导入数据到Oracle数据库,这对于数据仓库建设和数据分析至关重要。


