首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

SQL数据库错误.插入不了数据.非常古怪

2012-12-14 
SQL数据库异常..插入不了数据..非常古怪本帖最后由 langya001 于 2012-12-05 12:06:52 编辑系统:Windows X

SQL数据库异常..插入不了数据..非常古怪
本帖最后由 langya001 于 2012-12-05 12:06:52 编辑 系统:Windows Xp
环境:VS2008+SQL2008+SQLPRESS
功能:读取文件夹内的txt文件.将数据分割导入数据库(网上的教程)


            string FilePath = @"F:\360云盘\手机号码归属地";
            //目标文件夹文件数组
            string[] Files = Directory.GetFiles(FilePath);
            //循环读取文件
            int i = 0;
            int j = 0;
            foreach (string file in Files)
            {
                //文件个数
                i = i + 1;

                //label1.Text = file.Replace(FilePath,"");
                string filename = file.Replace(FilePath, "");
                //读取文件
                using (FileStream PhoneNumber = File.OpenRead(file))
                {
                    //将文件内容以流的形式读取
                    using (StreamReader streamReader = new StreamReader(PhoneNumber, Encoding.GetEncoding("gb2312")))
                    {
                        //数据库连接
                        using (SqlConnection objConn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\xx.mdf;Integrated Security=True;User Instance=true"))
                        {
                            //打开数据库
                            objConn.Open();
                            //初始化SQLCommand对象,准备执行SQL
                            using (SqlCommand objCmd = objConn.CreateCommand())
                            {


                                //objCmd.CommandText = "Insert Into Phone(starNum,endNum,address) values (@starNum,@endNum,@address)";
                                string line = null;
                                //判断文件是否读到最后
                                while ((line = streamReader.ReadLine()) != null)
                                {
                                    //以-号分割为数组
                                    string[] phone = line.Split('-');

                                    string strNum = phone[0];
                                    string endNum = phone[1];
                                    string addr = phone[2];
                                    //将文件名与城市名组合

                                    addr = filename.Replace(".txt","") +" - " + addr;
                                    //执行SQL语句 
                                    objCmd.CommandText = "insert into Phone(starNum,endNum,address) values(" + strNum + "," + endNum + ",'" + addr + "')";
                                    objCmd.ExecuteNonQuery();
                                    j = j + 1;


                                }
                            }
                        }
                    }
                }
                label1.Text = "此次共导入" + i + "个文件," + j + "条数据";
            }
            MessageBox.Show("导入完成!");



i和j显示的数据都正常
但SQLPRESS的Phone表没有数据
使用断点跟踪.运行的SQL语句都正常解析了.整体程序运行也没有出错..就是SQLPRESS里面没有数据.

疯了....

[最优解释]
objCmd.CommandText  你跟踪提取出这里执行的语句然后手动从查询分析器中执行以下,差不多就能找到问题了,可能是和所读到的文件内容有关,比如有双引号造成引号不匹配截断字符串等,还有可能和编码有关系,虽然你所读的文本看起来是正常的,但是读到程序中有可能某些字符成了乱码等
[其他解释]
return  objCmd.ExecuteNonQuery();    看看返回什么
[其他解释]
我一看楼主的代码就要吐了,你的代码写的也太...

你很会用 Using吗

insert into Phone(starNum,endNum,address) values(" + strNum + "," + endNum + ",'" + addr + "')";



你确定你的数据是正确的,自己 调试下然后看看 SQL有错吗,放在查询分析器。


[其他解释]
objCmd.CommandType = 你想让他执行的类型。
后面是个枚举,具体我忘了,楼主好好找找
[其他解释]
strNum + "," + endNum + ",'" + addr 

最重要是这 3个参数是不是正确的。
[其他解释]
引用:
objCmd.CommandType = 你想让他执行的类型。
后面是个枚举,具体我忘了,楼主好好找找


是这句话
cmd.CommandType = CommandType.Text;
[其他解释]
首先确定你查看的数据库是你的程序用的数据库。VS有个很令人困惑的特点:它会在Debug目录下为你生成临时数据库,而你查的也许是你的local server数据库。
[其他解释]
1.用return objCmd.ExecuteNonQuery(); 
这个是运行不了的
---------
我用int  k=objCmd.ExecuteNonQuery(); 得到的值是1.

2.objCmd.CommandText  跟踪
这个我跟踪了.得到正常的SQL语句.复制到查询里面也能正常运行.

3.using..额.这个初学.根据教程来做的.用using可以自动调用Display()函数.方便点
数据是正常的.查询分析器里单独运行没有问题

4.在objCmd.CommandText定义前加objCmd.CommandType = CommandType.Text;
额.运行后.效果依旧.执行没问题.就是数据库里没数据..

断点前.得到的数据
objCmd.CommandText = "insert into Phone(starNum,endNum,address) values(13402000000,13402099999,'上海移动 - 上海')"
[其他解释]
这个我跟踪了.得到正常的SQL语句.复制到查询里面也能正常运行.正常运行后数据库中有数据吗?如果有数据库的话楼主很可能悲催的发现程序操作的和你实际查看的数据库不是同一个只是数据结构一致而已
------其他解决方案--------------------


这个我跟踪了.得到正常的SQL语句.复制到查询里面也能正常运行.正常运行后数据库中有数据吗?如果有数据库的话楼主很可能悲催的发现程序操作的和你实际查看的数据库不是同一个只是数据结构一致而已

-----------
可悲的我也怀疑过这个问题.建立了新库.本来的库叫PhoneNum.mdf...发现还是一样没有数据..

还用Reader读取了一下数据库..也是正常的...就是写不进去..
[其他解释]
连接字符串改下看看
Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=xx.mdf;Data Source=.\SQLEXPRESS

[其他解释]
首先确定你查看的数据库是你的程序用的数据库。VS有个很令人困惑的特点:它会在Debug目录下为你生成临时数据库,而你查的也许是你的local server数据库。

---------------------
额.这个我还真不知道.我是在服务器资源管理器里打开的数据库..呀..我查的也是这个数据库..应该不可能没写到这里吧
[其他解释]
连接字符串改下看看
Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=xx.mdf;Data Source=.\SQLEXPRESS
-------------------------------------
修改后..
无法打开登录所请求的数据库 "xx.mdf"。登录失败。
用户 'XP-201209181653\Administrator' 登录失败。
[其他解释]
可能性很大,呵呵
[其他解释]
@"Data Source=.\SQLEXPRESS;AttachDbFileName=
[其他解释]
DataDirectory
[其他解释]
@"Data Source=.\SQLEXPRESS;AttachDbFileName=
[其他解释]
\xx.mdf;Integrated Security=True;User Instance=true"

xx.mdf应该和程序exe在同一个目录下面
[其他解释]
DataDirectory

热点排行