黑马程序员技术交流社区

标题: 数据库添加不进去 [打印本页]

作者: 王玲星    时间: 2012-6-30 23:04
标题: 数据库添加不进去
OpenFileDialog ofd=new OpenFileDialog();  //打开文件选择
            if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK)//如果选择的不是打开
            {
                return;//则返回,结束程序
            }
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\File.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();//打开连接
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //cmd.CommandText = "insert into T_person(Name,Age) values (@na,@ag)";
                    using (FileStream filestream = File.OpenRead(ofd.FileName))//读取文件
                    {
                        using (StreamReader streamReaser = new StreamReader(filestream))
                        {
                            string line = null;
                            while ((line = streamReaser.ReadLine()) != null)
                            {
                                string[] strs = line.Split(' ');
                                string name = strs[0];
                                int age = Convert.ToInt32(strs[1]);
                                //cmd.Parameters.Add(new SqlParameter("na", name));
                                //cmd.Parameters.Add(new SqlParameter("ag", age));
                                cmd.CommandText = "insert into T_person(Name,Age) values ('"+name+"',"+age+")";
                                MessageBox.Show(cmd.CommandText+","+("影响行数:"+cmd.ExecuteNonQuery()));
                                 //cmd.ExecuteNonQuery();
                                //cmd.Parameters.Clear();
                            }
                            MessageBox.Show("文件导入成功!");
                        }
                    }
                }
            }

请忽略文件导入,主要是怎么都加不到数据库中去,连影响行数都出来了,数据库中死活没有,手动添加没问题。
之前的写的是参数替代,可是发现它怎么都替代不了。。。我真心惆怅了~~~~

作者: xiaozehope    时间: 2012-6-30 23:17
你添加之后有没有刷新一下数据库啊,程序没有问题的啊,而且受影响行数都出来了。我怀疑你是不是没有刷新数据库才看不到数据的吧
作者: 王志波    时间: 2012-7-1 00:41
while ((line = streamReaser.ReadLine()) != null)
                            {
                                string[] strs = line.Split(' ');
                                string name = strs[0];
                                int age = Convert.ToInt32(strs[1]);
                                //cmd.Parameters.Add(new SqlParameter("@na", name));
                                //cmd.Parameters.Add(new SqlParameter("@ag", age));
                                cmd.CommandText = "insert into T_person(Name,Age) values ('"+name+"',"+age+")";
                                MessageBox.Show(cmd.CommandText+","+("影响行数:"+cmd.ExecuteNonQuery()));

加@试试
                                 //cmd.ExecuteNonQuery();
                                //cmd.Parameters.Clear();

作者: 戴伟    时间: 2012-7-1 09:53
我也碰到过这个问题,是因为那段查找数据库文件的神奇代码位置写错了,写到program.cs文件中的Application.Run(new Form1())的后面去了,所以数据库文件里总是没有内容,但能返回影响的行数,你把神奇代码放在Application.Run的前面执行一下试试吧
作者: 王玲星    时间: 2012-7-1 12:48
xiaozehope 发表于 2012-6-30 23:17
你添加之后有没有刷新一下数据库啊,程序没有问题的啊,而且受影响行数都出来了。我怀疑你是不是没有刷新数 ...

我刷了好多次,而且还关了 重开过。。。我现在所有跟数据库有关的程序都出错。。烦死我了  :Q
作者: 王玲星    时间: 2012-7-1 12:52
戴伟 发表于 2012-7-1 09:53
我也碰到过这个问题,是因为那段查找数据库文件的神奇代码位置写错了,写到program.cs文件中的Application. ...

尝试过。。依然没有,好惆怅啊~~~~~~~~~~~~
作者: 戴伟    时间: 2012-7-1 15:46
你这个现象肯定可以归为找不到数据库文件的问题,所以你看看AttachDBFilename=|DataDirectory|\File.mdf这个路径有没有问题,然后你附加的数据库放那个文件夹了?有没有移动mdf文件?
作者: xiaozehope    时间: 2012-7-2 00:45
视频中说到的神奇代码,你有没有添加啊,代码如下:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("Datadirectory", dataDir);
            }

作者: 王玲星    时间: 2012-7-2 01:27
感谢大家的热心帮助,问题已经解决了,是连接字符串写的有问题
新建个txt,把扩展名改成.udl,打开选择“SQL Server”点击下一步,再选择服务器名称,选数据库名称,测试连接,连接成功后,以文本方式打开,就可以的到正确的连接字符串了,简直太方便了。
作者: 许庭洲    时间: 2012-7-2 10:30
cmd.CommandText = "insert into T_person(Name,Age) values ('"+name+"',"+age+")";//向数据库内的T_person表增加一条记录,SQL语句没问题,若插入失败,SQL语句可能没有触发File数据库T_person表的,可能你的数据库不完整吧。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2