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

langya001 2012-12-05 12:05:38
系统: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里面没有数据.

疯了....
...全文
303 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
langya001 2012-12-05
  • 打赏
  • 举报
回复
结帖.问题解决..应该是环境问题.我连接SQL2008.不用VS自带的那个SQLPRESS.数据正常写入了... 谢谢以上兄弟姐妹们的热心回答.
hard_learner 2012-12-05
  • 打赏
  • 举报
回复
那这个问题有点奇怪了 你单独写个方法,功能就是手动插入一条代码,比如你跟踪出的 objCmd.CommandText = "insert into Phone(starNum,endNum,address) values(13402000000,13402099999,'上海移动 - 上海')" 这条语句看看能成功插入不?这样能插入的话说明问题不在没法写入数据库数据
langya001 2012-12-05
  • 打赏
  • 举报
回复
又新建了一个库.重新建了表...还是依旧.唉...疯也
langya001 2012-12-05
  • 打赏
  • 举报
回复
@"Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\xx.mdf;Integrated Security=True;User Instance=true" xx.mdf应该和程序exe在同一个目录下面 ------------------------ 这个问题应该不存在.因为如果没连接上的话.VS肯定会抛出异常呀.而且我这个xx.mdf是通过解决方案里添加的项...
事理 2012-12-05
  • 打赏
  • 举报
回复
@"Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\xx.mdf;Integrated Security=True;User Instance=true" xx.mdf应该和程序exe在同一个目录下面
hard_learner 2012-12-05
  • 打赏
  • 举报
回复
可能性很大,呵呵
langya001 2012-12-05
  • 打赏
  • 举报
回复
连接字符串改下看看 Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=xx.mdf;Data Source=.\SQLEXPRESS ------------------------------------- 修改后.. 无法打开登录所请求的数据库 "xx.mdf"。登录失败。 用户 'XP-201209181653\Administrator' 登录失败。
langya001 2012-12-05
  • 打赏
  • 举报
回复
首先确定你查看的数据库是你的程序用的数据库。VS有个很令人困惑的特点:它会在Debug目录下为你生成临时数据库,而你查的也许是你的local server数据库。 --------------------- 额.这个我还真不知道.我是在服务器资源管理器里打开的数据库..呀..我查的也是这个数据库..应该不可能没写到这里吧
事理 2012-12-05
  • 打赏
  • 举报
回复
连接字符串改下看看 Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=xx.mdf;Data Source=.\SQLEXPRESS
langya001 2012-12-05
  • 打赏
  • 举报
回复
这个我跟踪了.得到正常的SQL语句.复制到查询里面也能正常运行.正常运行后数据库中有数据吗?如果有数据库的话楼主很可能悲催的发现程序操作的和你实际查看的数据库不是同一个只是数据结构一致而已 ----------- 可悲的我也怀疑过这个问题.建立了新库.本来的库叫PhoneNum.mdf...发现还是一样没有数据.. 还用Reader读取了一下数据库..也是正常的...就是写不进去..
ktei2008 2012-12-05
  • 打赏
  • 举报
回复
首先确定你查看的数据库是你的程序用的数据库。VS有个很令人困惑的特点:它会在Debug目录下为你生成临时数据库,而你查的也许是你的local server数据库。
hard_learner 2012-12-05
  • 打赏
  • 举报
回复
这个我跟踪了.得到正常的SQL语句.复制到查询里面也能正常运行.正常运行后数据库中有数据吗?如果有数据库的话楼主很可能悲催的发现程序操作的和你实际查看的数据库不是同一个只是数据结构一致而已
langya001 2012-12-05
  • 打赏
  • 举报
回复
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,'上海移动 - 上海')"
_小黑_ 2012-12-05
  • 打赏
  • 举报
回复
引用 4 楼 l397870376 的回复:
objCmd.CommandType = 你想让他执行的类型。 后面是个枚举,具体我忘了,楼主好好找找
是这句话 cmd.CommandType = CommandType.Text;
XBodhi. 2012-12-05
  • 打赏
  • 举报
回复
strNum + "," + endNum + ",'" + addr 最重要是这 3个参数是不是正确的。
_小黑_ 2012-12-05
  • 打赏
  • 举报
回复
objCmd.CommandType = 你想让他执行的类型。 后面是个枚举,具体我忘了,楼主好好找找
XBodhi. 2012-12-05
  • 打赏
  • 举报
回复
我一看楼主的代码就要吐了,你的代码写的也太... 你很会用 Using吗

insert into Phone(starNum,endNum,address) values(" + strNum + "," + endNum + ",'" + addr + "')";
你确定你的数据是正确的,自己 调试下然后看看 SQL有错吗,放在查询分析器。
hard_learner 2012-12-05
  • 打赏
  • 举报
回复
objCmd.CommandText 你跟踪提取出这里执行的语句然后手动从查询分析器中执行以下,差不多就能找到问题了,可能是和所读到的文件内容有关,比如有双引号造成引号不匹配截断字符串等,还有可能和编码有关系,虽然你所读的文本看起来是正常的,但是读到程序中有可能某些字符成了乱码等
Assassin_ 2012-12-05
  • 打赏
  • 举报
回复
return objCmd.ExecuteNonQuery(); 看看返回什么

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧