Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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# 将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

大家好,我只是需要一点关于修改此代码的帮助。我已经有了这个来保存文本文件的第一行,但我不知道如何让它读取其他行。此外,我想验证一下,如果SQL表已经包含该信息,它将启动一个异常或消息框,让用户知道文件已经存在。请帮助

我建议逐行读取文件,将值添加到a,然后使用将其存储到数据库中

大概是

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
}