C#中怎样将文本文件导入到数据库的问题?

时间:2021-05-08 23:20:45
    各位大侠,请教个问题:我现在有一个文本文件,形式如下
    点号       X             Y              Z         点性质       
     1    -2019.035      -290.9444         0           1
以下还有很多这样的列,如果想把这里的每一列数据保存到SQL数据库中,应该怎样做?请各位大侠给予知道,帮忙写出源代码,谢谢,非常感谢!

10 个解决方案

#1


引用 1 楼 lyb018 的回复:
一行一行解析,然后再插入数据,不行么?

一行一行解析,然后再插入数据,不行么?

#2


 按行读呗,没好办法

#3


最好是固定分隔符的文本,比如CVS格式就是那样,如果导入的内容中也可能含有逗号,那么就不要将逗号作为分隔符了,如果导入的内容中有可能出现换行符,比如某个列就是一段文本,那么行结束符也不能使用默认的。
然后调用外部工具bcp即可完成快速导入,有关bcp的用法你在命令行下键入“bcp /?”即可给出详细的解说。那个C#调用外部程序怎么做,应该不用说了吧,有个Process类的,你可以看下MSDN的帮助。

#4


有现成的工具啊,sql的导入导出

#5


引用 4 楼 soaringbird 的回复:
有现成的工具啊,sql的导入导出

嗯,实在不行,弄个dataset或datatable之类的,把东西存进去,然后更新好了

#6


额,最好是先读下SQL里表的结构

#7


这样的很多,要写一工具。
读文体的列内容,选数据库的列内容,
然后做自动对应与手工对应。
导入时,先将数据读出生成sql insert代码就可以了。

#8


string dh = a[0];
            string X1 = a[1];
            string Y1 = a[2];
            string Z1 = a[3];
            string bj1 = a[4];
            string dxz1 = a[5];
            string qyh1 = a[6];
            string dmc1 = a[7];
            string yxx1 = a[8];

            string constr = @"data source=PC-11191038\SQLEXPRESS;initial catalog=露天矿卡车调度系统;user id=sa;password=sa;";
            string strSQL = "insert into PersonInfo(X,Y,Z,bj,dxz,qyh,dmc,yxx) values('" + X1 + "','" + Y1 + "','" + Z1 + "','" + bj1 + "','" + dxz1 + "','" + qyh1 + "','" + dmc1 + "','" + yxx1 + "')";
            SqlConnection connection = new SqlConnection(constr);
            SqlCommand command = new SqlCommand(strSQL, connection);
            connection.Open();
            int count = command.ExecuteNonQuery();
            connection.Close();

            if (count != 0)
            {
                return true;
            }
            else
            {
                return false;
            }
以上是我的代码,但是每到“int count = command.ExecuteNonQuery();”时,就警告“从数据类型 varchar 转换为 float 时出错。”
我实在找不出是什么原因了!

#9


8楼的 sql 语句写错了,数据表中字段类型为 float , insert 语句中却按字符类型写

#10


我的问题解决了,很感谢各位!

#1


引用 1 楼 lyb018 的回复:
一行一行解析,然后再插入数据,不行么?

一行一行解析,然后再插入数据,不行么?

#2


 按行读呗,没好办法

#3


最好是固定分隔符的文本,比如CVS格式就是那样,如果导入的内容中也可能含有逗号,那么就不要将逗号作为分隔符了,如果导入的内容中有可能出现换行符,比如某个列就是一段文本,那么行结束符也不能使用默认的。
然后调用外部工具bcp即可完成快速导入,有关bcp的用法你在命令行下键入“bcp /?”即可给出详细的解说。那个C#调用外部程序怎么做,应该不用说了吧,有个Process类的,你可以看下MSDN的帮助。

#4


有现成的工具啊,sql的导入导出

#5


引用 4 楼 soaringbird 的回复:
有现成的工具啊,sql的导入导出

嗯,实在不行,弄个dataset或datatable之类的,把东西存进去,然后更新好了

#6


额,最好是先读下SQL里表的结构

#7


这样的很多,要写一工具。
读文体的列内容,选数据库的列内容,
然后做自动对应与手工对应。
导入时,先将数据读出生成sql insert代码就可以了。

#8


string dh = a[0];
            string X1 = a[1];
            string Y1 = a[2];
            string Z1 = a[3];
            string bj1 = a[4];
            string dxz1 = a[5];
            string qyh1 = a[6];
            string dmc1 = a[7];
            string yxx1 = a[8];

            string constr = @"data source=PC-11191038\SQLEXPRESS;initial catalog=露天矿卡车调度系统;user id=sa;password=sa;";
            string strSQL = "insert into PersonInfo(X,Y,Z,bj,dxz,qyh,dmc,yxx) values('" + X1 + "','" + Y1 + "','" + Z1 + "','" + bj1 + "','" + dxz1 + "','" + qyh1 + "','" + dmc1 + "','" + yxx1 + "')";
            SqlConnection connection = new SqlConnection(constr);
            SqlCommand command = new SqlCommand(strSQL, connection);
            connection.Open();
            int count = command.ExecuteNonQuery();
            connection.Close();

            if (count != 0)
            {
                return true;
            }
            else
            {
                return false;
            }
以上是我的代码,但是每到“int count = command.ExecuteNonQuery();”时,就警告“从数据类型 varchar 转换为 float 时出错。”
我实在找不出是什么原因了!

#9


8楼的 sql 语句写错了,数据表中字段类型为 float , insert 语句中却按字符类型写

#10


我的问题解决了,很感谢各位!