C# 将txt文件插入数据库 公共部分类表单1:表单 { public SqlConnection con=new SqlConnection(@“数据源=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Alexander\Desktop\Archivos.mdf;集成安全性=True;连接超时=30”); 私有void Readbtn_单击(对象发送方,事件参数e) { con.Open(); Propiedades prop=新的Propiedades(); List myValues=new List(); 弦线; StreamReader文件=新的StreamReader(@“c:\temp\archivo.txt”); 如果((line=file.ReadLine())!=null) { string[]fields=line.Split(','); prop.matricula=字段[0]。ToString(); prop.nombre=字段[1]。ToString(); prop.sueldo=decimal.Parse(字段[2]); for(int i=0;i
大家好,我只是需要一点关于修改此代码的帮助。我已经有了这个来保存文本文件的第一行,但我不知道如何让它读取其他行。此外,我想验证一下,如果SQL表已经包含该信息,它将启动一个异常或消息框,让用户知道文件已经存在。请帮助我建议逐行读取文件,将值添加到a,然后使用将其存储到数据库中 大概是C# 将txt文件插入数据库 公共部分类表单1:表单 { public SqlConnection con=new SqlConnection(@“数据源=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Alexander\Desktop\Archivos.mdf;集成安全性=True;连接超时=30”); 私有void Readbtn_单击(对象发送方,事件参数e) { con.Open(); Propiedades prop=新的Propiedades(); List myValues=new List(); 弦线; StreamReader文件=新的StreamReader(@“c:\temp\archivo.txt”); 如果((line=file.ReadLine())!=null) { string[]fields=line.Split(','); prop.matricula=字段[0]。ToString(); prop.nombre=字段[1]。ToString(); prop.sueldo=decimal.Parse(字段[2]); for(int i=0;i,c#,sql,sql-server,streamreader,C#,Sql,Sql Server,Streamreader,大家好,我只是需要一点关于修改此代码的帮助。我已经有了这个来保存文本文件的第一行,但我不知道如何让它读取其他行。此外,我想验证一下,如果SQL表已经包含该信息,它将启动一个异常或消息框,让用户知道文件已经存在。请帮助我建议逐行读取文件,将值添加到a,然后使用将其存储到数据库中 大概是 public partial class Form1 : Form { public SqlConnection con = new SqlConnection(@"Data Source=(LocalD
public partial class Form1 : Form
{
public SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Alexander\Desktop\Archivos.mdf;Integrated Security=True;Connect Timeout=30");
private void Readbtn_Click(object sender, EventArgs e)
{
con.Open();
Propiedades prop = new Propiedades();
List<string> myValues = new List<string>();
string line;
StreamReader file = new StreamReader(@"c:\temp\archivo.txt");
if ((line = file.ReadLine()) != null)
{
string[] fields = line.Split(',');
prop.matricula = fields[0].ToString();
prop.nombre = fields[1].ToString();
prop.sueldo = decimal.Parse(fields[2]);
for (int i = 0; i < fields.Length; i++)
{
listBox1.Items.Add(fields[i]);
}
}
SqlCommand cmd = new SqlCommand("INSERT INTO Archivos(Codigo, Nombre, Sueldo) VALUES (@Matricula, @Nombre, @Sueldo", con);
cmd.Parameters.AddWithValue("@Matricula", prop.matricula);
cmd.Parameters.AddWithValue("@Nombre", prop.nombre);
cmd.Parameters.AddWithValue("@Sueldo", prop.sueldo);
cmd.ExecuteNonQuery();
con.Close();
}
我添加了一些逻辑来进行批处理,因为一个大文件可能会由于DataTable的大小而导致应用程序内存不足。有几件事需要做。首先,我想使用while循环来代替第一个if语句
int batchSize = 10000;
SqlBulkCopy bc = new SqlBulkCopy(con);
DataTable dtArchivos = new DataTable();
dtArchivos.Columns.AddRange(new []
{
new DataColumn("Codigo", typeof(string)),
new DataColumn("Nombre", typeof(string)),
new DataColumn("Sueldo", typeof(decimal)),
});
StreamReader file = new StreamReader(@"c:\temp\archivo.txt");
string line = file.ReadLine();
while (line != null)
{
string[] fields = line.Split(',');
DataRow dr = dtArchivos.NewRow();
dr["Codigo"] = fields[0].ToString();
dr["Nombre"] = fields[1].ToString();
dr["Sueldo"] = decimal.Parse(fields[2]);
dtArchivos.Rows.Add(dr);
if (dtArchivos.Rows.Count == batchSize)
{
bc.WriteToServer(dtArchivos);
dtArchivos.Clear();
}
line = file.ReadLine();
}
bc.WriteToServer(dtArchivos);
首先,考虑使用LINQ为你的代码——如果你不太关注稍微多的开销,LINQ会使你的生活变得简单多了。它会自动为你缓存信息,并且对很多事情都会更有效率,更不用说代码有时更容易理解。需要在VisualStudio中创建数据库的ado.net模型,这不会花费太长时间
listBox1.Items.Add(prop.matricula+','+prop.nombre+',prop.sueldo.toString());
或者类似的东西,然后搜索ado.net实体。然后,只需填写它要求的详细信息。然后,您可以使用此实体(如果您无法找到如何操作,请回复,以便我可以根据需要进行修复)添加数据,使用您指定的方式
现在,代码不起作用的原因可能是代码问题。我认为使用分隔符可能是问题所在,下面的代码可能会有所帮助:
File -> Add Item -> Add new Item
原因是,读者会一直读取,直到返回值为False或Null。由于某种原因,您的代码似乎在第一行之后离开,这可能会解决问题。就是这样,我现在将使用LINQ进行处理。感谢您的建议。没问题。相信我,ADO很难,并且导致了很多小问题。一个然后LINQ让生活变得简单多了。
File -> Add Item -> Add new Item
StreamReader file = new StreamReader(@"c:\temp\archivo.txt");
while(file.Read()){
//YOUR CODE FOR CONCATENATING DATA HERE
}