C#代码实现从文件中读出数据在导入到数据库
文件数据如图1,每一列的值为STRIP_IDVARCHAR2(20BYTE),SAP_CODEVARCHAR2(30BYTE),PCB_BATCHNOVARCHAR2(3...
文件数据如图1,每一列的值为
STRIP_ID VARCHAR2(20BYTE),
SAP_CODE VARCHAR2(30BYTE),
PCB_BATCHNO VARCHAR2(30BYTE),
VENDOR_NAME VARCHAR2(30BYTE),
COLUMN_COUNT VARCHAR2(10BYTE),
ROW_COUNT VARCHAR2(10BYTE),
GOOD_COUNT VARCHAR2(10BYTE),
REJECT_COUNT VARCHAR2(10BYTE),
MAP_DATA VARCHAR2(3000BYTE),
INSERTTIME DATE
导入成图二的状态
具体思路是先将数据文件导入进一个数组,但注意前八项是单独的表内,后面的0100110 11101101100111 11001101011111 11111101111111 11111111111011 1111110则在一个表内每行用/分开,空格保留,且每行表单最后添加
INSERTTIME 在线等解决 展开
STRIP_ID VARCHAR2(20BYTE),
SAP_CODE VARCHAR2(30BYTE),
PCB_BATCHNO VARCHAR2(30BYTE),
VENDOR_NAME VARCHAR2(30BYTE),
COLUMN_COUNT VARCHAR2(10BYTE),
ROW_COUNT VARCHAR2(10BYTE),
GOOD_COUNT VARCHAR2(10BYTE),
REJECT_COUNT VARCHAR2(10BYTE),
MAP_DATA VARCHAR2(3000BYTE),
INSERTTIME DATE
导入成图二的状态
具体思路是先将数据文件导入进一个数组,但注意前八项是单独的表内,后面的0100110 11101101100111 11001101011111 11111101111111 11111111111011 1111110则在一个表内每行用/分开,空格保留,且每行表单最后添加
INSERTTIME 在线等解决 展开
3个回答
展开全部
代码如下:
//定义数据连接字符串
private string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
/// <summary>
/// 用insert方法从文本文件中批量导入到数据库表中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnInsert_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文档|*.txt";
//如果用户没有选择文件并确定则直接返回
if (ofd.ShowDialog() != true)
{
return;
}
//获得文件名包括路径
string fileName = ofd.FileName;
try
{
//定义一个开始时间
DateTime startTime = DateTime.Now;
//因为文件比较大,所有使用StreamReader的效率要比使用File.ReadLines高
using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
while (!sr.EndOfStream)
{
string readStr = sr.ReadLine();//读取一行数据
if (readStr.StartsWith("1"))//去掉标题行
{
string[] strs = readStr.Split(new char[] { '\t', '"' }, StringSplitOptions.RemoveEmptyEntries);//将读取的字符串按"制表符/t“和””“分割成数组
string startNum = strs[0];
string numArea = strs[1];
string numType = strs[2];
cmd.CommandText = "insert into T_PhoneInfo(FStartNum,FNumArea,FNumType) values(@startNum,@numArea,@numType)";
cmd.Parameters.Clear();//清除上一次的参数
cmd.Parameters.Add(new SqlParameter("@startNum", startNum));
cmd.Parameters.Add(new SqlParameter("@numArea", numArea));
cmd.Parameters.Add(new SqlParameter("@numType", numType));
cmd.ExecuteNonQuery();
}
}
}
}
}
//结束时间-开始时间=总共花费的时间
TimeSpan ts = DateTime.Now - startTime;
MessageBox.Show("导入数据成功!共花费时间:" + ts.ToString());
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
展开全部
有思路了还有什么难解决的?读出文件流的内容,封装成数组根据“\r\n”分割,然后insert就行了
追问
渣技术,写不出来代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二百分我给弄了。
追问
没有那么多分
追答
//this.txtSavePath.Text为读取文件的路径。
FileStream fs = new FileStream(this.txtSavePath.Text, FileMode.Open, FileAccess.Read);
StreamReader mysr = new StreamReader(fs);
//可以根据数据库的字段来判断到底是多少,此处根据你的上下文写9
String[] str = new String[9];
int i =0;
string ss = "";
//当数据可以读取时,进入循环
while (mysr.BaseStream.CanRead)
{
//读取前面8个字段值
if (i <= 7)
str[i] = mysr.ReadLine();
else
{
if (mysr.EndOfStream)
break;
//读取后面二进制部分的值
ss = ss + mysr.ReadLine() + "/";
}
i++;
}
//把读取值赋值给数组,至此结束读取。
str[8] = ss.TrimEnd('/');
//估计你也就这里难,插入数据库的部分省略。
mysr.Close();
fs.Close();
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询