解决C#中txt文档导入数据库时,中文显示乱码的问题
与前篇文章不同之处用红笔标记
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
namespace txt导入至数据库
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static System.Text.Encoding GetFileEncoding(string fileFullName)
{
FileStream fs = new FileStream(fileFullName, FileMode.Open, FileAccess.Read);
System.Text.Encoding r = GetType(fs);
fs.Close();
return r;
}
public static System.Text.Encoding GetType(FileStream fs)
{
/*
* byte[] Unicode=new byte[]{0xFF,0xFE};
* byte[] UnicodeBIG=new byte[]{0xFE,0xFF};
* byte[] UTF8=new byte[]{0xEF,0xBB,0xBF};
*/
BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
byte[] ss = r.ReadBytes(3);
r.Close();
//编码类型 Coding=编码类型.ASCII;
if (ss[0] >= 0xEF)
{
if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)
{
return System.Text.Encoding.UTF8;
}
else if (ss[0] == 0xFE && ss[1] == 0xFF)
{
return System.Text.Encoding.BigEndianUnicode;
}
else if (ss[0] == 0xFF && ss[1] == 0xFE)
{
return System.Text.Encoding.Unicode;
}
else
{
return System.Text.Encoding.Default;
}
}
else
{
return System.Text.Encoding.Default;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (ofdfile.ShowDialog() == DialogResult.OK)
{
using (FileStream fileStream=File.OpenRead(ofdfile.FileName))
{
Encoding readEncoding = GetFileEncoding(ofdfile.FileName);
using (StreamReader streamreader = new StreamReader(fileStream,readEncoding))
{
using (SqlConnection conn = new SqlConnection("server=.;database=test;user id=sa;password=123456"))
{
conn.Open();
string lines = null;
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "insert into T_persons(name,age)values(@name,@age)";
while ((lines=streamreader.ReadLine()) != null)
{
string[] strs = lines.Split('|');
string name = strs[0].ToString();
int age = Convert.ToInt32(strs[1]);
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("name",name));
cmd.Parameters.Add(new SqlParameter("age",age));
cmd.ExecuteNonQuery();
}
}
}
}
}
MessageBox.Show("数据导入成功");
}
}
}
}