c#无法写入数据库,很急,求各位指点

qq_36157162 2017-10-24 09:00:46
我想在button里加事件,点击button时,其他几个textbox的数据都传到数据库里,但是显示的是“连接数据库错误”,就是我catch里写的,是我的代码有问题吗,还是不能这样写
private void button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection sqlcon = new SqlConnection("Data Source=laptop-cl08flf2;Initial Catalog=hospital;User Id=LAPTOP-CL08FLF2\\lenovo;Integrated Security=SSPI");
sqlcon.Open();
string InsertSql = "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(" + textBox3.Text + "," + textBox1.Text + "," + textBox2.Text + "," + textBox4.Text + "," + listBox1.Text + "," + listBox2.Text + ")";
SqlCommand com = new SqlCommand(InsertSql, sqlcon);
com.ExecuteNonQuery();
SqlDataAdapter ada = new SqlDataAdapter("select * from patient", sqlcon);
DataSet mypatient = new DataSet();
ada.Fill(mypatient, "patient");
sqlcon.Close();
}
catch
{
MessageBox.Show("连接数据库失败");
}
}
...全文
837 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-10-25
  • 打赏
  • 举报
回复
引用 22 楼 qq_36157162 的回复:
我把一句话不小心注释掉了
没事就结贴吧
tei333 2017-10-24
  • 打赏
  • 举报
回复
引用 15 楼 qq_36157162 的回复:
[quote=引用 14 楼 tei333的回复:][quote=引用 13 楼 qq_36157162的回复:][quote=引用 12 楼 tei333的回复:][quote=引用 10 楼 qq_36157162的回复:][quote=引用 6 楼 tei333的回复:][quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗[/quote] 把在sql server里的命令复制替换vs里的试试,这样应该也是没问题的[/quote] 依然不行,难道是我的数据库没有开吗[/quote] 你单步调试如果每步都没问题的话,数据库连接是ok的,应该是有结果的[/quote] 我看了一下配置管理器,mssqlserver是运行的,但是sqlexpress不能启动,这个影响吗[/quote] 这个我不是很清楚,但是你用sql server可以的话用vs应该也没问题,你说你用sql server能insert,VS不行的话,你可能要确认一下你是不是连接成功了,你单步调试的时候, sqlcon.Open();这一条是不是能正常过,能过数据库连接就正常,那一样的命令在sql上可以的话在VS上应该也可以,如果都没问题的话,我也不知道是神马情况了
qq_36157162 2017-10-24
  • 打赏
  • 举报
回复
引用 14 楼 tei333的回复:
[quote=引用 13 楼 qq_36157162的回复:][quote=引用 12 楼 tei333的回复:][quote=引用 10 楼 qq_36157162的回复:][quote=引用 6 楼 tei333的回复:][quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗[/quote] 把在sql server里的命令复制替换vs里的试试,这样应该也是没问题的[/quote] 依然不行,难道是我的数据库没有开吗[/quote] 你单步调试如果每步都没问题的话,数据库连接是ok的,应该是有结果的[/quote] 我看了一下配置管理器,mssqlserver是运行的,但是sqlexpress不能启动,这个影响吗
tei333 2017-10-24
  • 打赏
  • 举报
回复
引用 13 楼 qq_36157162的回复:
[quote=引用 12 楼 tei333的回复:][quote=引用 10 楼 qq_36157162的回复:][quote=引用 6 楼 tei333的回复:][quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗[/quote] 把在sql server里的命令复制替换vs里的试试,这样应该也是没问题的[/quote] 依然不行,难道是我的数据库没有开吗[/quote] 你单步调试如果每步都没问题的话,数据库连接是ok的,应该是有结果的
qq_36157162 2017-10-24
  • 打赏
  • 举报
回复
引用 12 楼 tei333的回复:
[quote=引用 10 楼 qq_36157162的回复:][quote=引用 6 楼 tei333的回复:][quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗[/quote] 把在sql server里的命令复制替换vs里的试试,这样应该也是没问题的[/quote] 依然不行,难道是我的数据库没有开吗
tei333 2017-10-24
  • 打赏
  • 举报
回复
引用 10 楼 qq_36157162的回复:
[quote=引用 6 楼 tei333的回复:][quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗[/quote] 把在sql server里的命令复制替换vs里的试试,这样应该也是没问题的
大然然 2017-10-24
  • 打赏
  • 举报
回复
你的值没有加单引号
qq_36157162 2017-10-24
  • 打赏
  • 举报
回复
引用 6 楼 tei333的回复:
[quote=引用 4 楼 qq_36157162 的回复:] [quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的[/quote] 我在sql Server insert了,就insert1234567,是OK的,然后这个数据也可以同步到vs里,但是我在vs写同样的代码就是不行,是我sqlcommand有问题吗
zbdzjx 2017-10-24
  • 打赏
  • 举报
回复
这样写就会报错啊。 在 " + textBox3.Text + " 两边都加上单引号 ‘" + textBox3.Text + "’ 后面的几个textBox都要加上,再补全7个值。
m0_38070965 2017-10-24
  • 打赏
  • 举报
回复
字段类型有错的没??都是字符串?
qq_36157162 2017-10-24
  • 打赏
  • 举报
回复
引用 21 楼 tei333的回复:
[quote=引用 19 楼 qq_36157162的回复:][quote=引用 17 楼 _大约在冬季_的回复:]
        private void button1_Click(object sender, EventArgs e)
        {
            //Windows账号登录,不需要用户名
            string connString = @"Data Source=laptop-cl08flf2;Initial Catalog=hospital;Integrated Security=True;";
            try
            {
                //using 不需要自己关闭
                using (SqlConnection sqlcon = new SqlConnection(connString))
                {
                    sqlcon.Open();
                    string InsertSql = @"insert into patient([身份证号],[姓名],[年龄],[电话],[科室],[门诊类别],[编号]) 
                                                            values(@p1,  @p2,  @p3,    @p4,   @p5,    @p6,     @7 )";
                    //参数化效率高,而且更安全
                    SqlParameter[] spArr = new SqlParameter[]{
                        new SqlParameter("@p1",textBox3.Text.Trim()),
                        new SqlParameter("@p2",textBox1.Text.Trim()),
                        new SqlParameter("@p3",textBox2.Text.Trim()),
                        new SqlParameter("@p4",textBox4.Text.Trim()),
                        new SqlParameter("@p5",listBox1.Text.Trim()),
                        new SqlParameter("@p6",listBox2.Text.Trim()),
                        new SqlParameter("@p7",textBox3.Text.Trim())    //你原来的代码没有找到第7个值

                    };
                    SqlCommand com = new SqlCommand(InsertSql, sqlcon);
                    com.Parameters.AddRange(spArr);
                    com.ExecuteNonQuery();
                    SqlDataAdapter ada = new SqlDataAdapter("select * from patient", sqlcon);
                    DataSet mypatient = new DataSet();
                    ada.Fill(mypatient, "patient");
                }
            }
            catch(Exception ex)
            {
                //应该输出详细的错误信息,便于定位错误
                MessageBox.Show("连接数据库失败, 详细信息:"+ex.Message);
            }
        }
哇,谢谢了,我发现自己错在哪[/quote] 哪儿的错啊,分享出来呗[/quote] 我把一句话不小心注释掉了
zestsnake 2017-10-24
  • 打赏
  • 举报
回复
textBox3.Text 改成 textbox3.text.tostring() 试下
tei333 2017-10-24
  • 打赏
  • 举报
回复
引用 4 楼 qq_36157162 的回复:
[quote=引用 3 楼 tei333的回复:]建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据[/quote] 都insert了,还没有数据啊?是一行数据都没有还是有一行但是里面的数据是空的?可以试一下5楼说的,在SQL server跑一下,这样比较直观。如果你没有装的话,建议你把你的命令写简单点试试,比如: "insert into patient(身份证号,姓名,年龄,电话,科室,门诊类别,编号) values(' 1 ','2','3','4','5','6','7')" 你先看看整个流程是不是OK的
  • 打赏
  • 举报
回复
引用 4 楼 qq_36157162 的回复:
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据
你需要的值有七个 而你只传了6个参数进去了 你可以把这个SQL语句放到你的SQL server里面跑一下 看有没有问题
qq_36157162 2017-10-24
  • 打赏
  • 举报
回复
引用 3 楼 tei333的回复:
建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
嗯嗯,是的我后来发现多写了一个,删掉了之后,现在是不报异常了,可以运行,但是数据库里面没有写进去的数据
tei333 2017-10-24
  • 打赏
  • 举报
回复
建议你看一下捕获到的异常,看看Id是不是没有设为标识或者是不允许为NULL什么的,还有你的命令是不是少了一个编号的赋值啊,列有7个,但是我看你赋值只有6个啊
exception92 2017-10-24
  • 打赏
  • 举报
回复
User Id=LAPTOP-CL08FLF2\\lenovo;Integrated Security=SSPI" 既然windows集成登录 就不要user Id 了。
大鱼> 2017-10-24
  • 打赏
  • 举报
回复
你既然用了异常捕获,为什么不将异常显示出来呢?看一下报了什么异常不就知道原因了吗
tei333 2017-10-24
  • 打赏
  • 举报
回复
引用 19 楼 qq_36157162的回复:
[quote=引用 17 楼 _大约在冬季_的回复:]
        private void button1_Click(object sender, EventArgs e)
        {
            //Windows账号登录,不需要用户名
            string connString = @"Data Source=laptop-cl08flf2;Initial Catalog=hospital;Integrated Security=True;";
            try
            {
                //using 不需要自己关闭
                using (SqlConnection sqlcon = new SqlConnection(connString))
                {
                    sqlcon.Open();
                    string InsertSql = @"insert into patient([身份证号],[姓名],[年龄],[电话],[科室],[门诊类别],[编号]) 
                                                            values(@p1,  @p2,  @p3,    @p4,   @p5,    @p6,     @7 )";
                    //参数化效率高,而且更安全
                    SqlParameter[] spArr = new SqlParameter[]{
                        new SqlParameter("@p1",textBox3.Text.Trim()),
                        new SqlParameter("@p2",textBox1.Text.Trim()),
                        new SqlParameter("@p3",textBox2.Text.Trim()),
                        new SqlParameter("@p4",textBox4.Text.Trim()),
                        new SqlParameter("@p5",listBox1.Text.Trim()),
                        new SqlParameter("@p6",listBox2.Text.Trim()),
                        new SqlParameter("@p7",textBox3.Text.Trim())    //你原来的代码没有找到第7个值

                    };
                    SqlCommand com = new SqlCommand(InsertSql, sqlcon);
                    com.Parameters.AddRange(spArr);
                    com.ExecuteNonQuery();
                    SqlDataAdapter ada = new SqlDataAdapter("select * from patient", sqlcon);
                    DataSet mypatient = new DataSet();
                    ada.Fill(mypatient, "patient");
                }
            }
            catch(Exception ex)
            {
                //应该输出详细的错误信息,便于定位错误
                MessageBox.Show("连接数据库失败, 详细信息:"+ex.Message);
            }
        }
哇,谢谢了,我发现自己错在哪[/quote] 哪儿的错啊,分享出来呗
吉普赛的歌 2017-10-24
  • 打赏
  • 举报
回复
引用 19 楼 qq_36157162 的回复:
[quote=引用 17 楼 _大约在冬季_的回复:]
        private void button1_Click(object sender, EventArgs e)
        {
            //Windows账号登录,不需要用户名
            string connString = @"Data Source=laptop-cl08flf2;Initial Catalog=hospital;Integrated Security=True;";
            try
            {
                //using 不需要自己关闭
                using (SqlConnection sqlcon = new SqlConnection(connString))
                {
                    sqlcon.Open();
                    string InsertSql = @"insert into patient([身份证号],[姓名],[年龄],[电话],[科室],[门诊类别],[编号]) 
                                                            values(@p1,  @p2,  @p3,    @p4,   @p5,    @p6,     @7 )";
                    //参数化效率高,而且更安全
                    SqlParameter[] spArr = new SqlParameter[]{
                        new SqlParameter("@p1",textBox3.Text.Trim()),
                        new SqlParameter("@p2",textBox1.Text.Trim()),
                        new SqlParameter("@p3",textBox2.Text.Trim()),
                        new SqlParameter("@p4",textBox4.Text.Trim()),
                        new SqlParameter("@p5",listBox1.Text.Trim()),
                        new SqlParameter("@p6",listBox2.Text.Trim()),
                        new SqlParameter("@p7",textBox3.Text.Trim())    //你原来的代码没有找到第7个值

                    };
                    SqlCommand com = new SqlCommand(InsertSql, sqlcon);
                    com.Parameters.AddRange(spArr);
                    com.ExecuteNonQuery();
                    SqlDataAdapter ada = new SqlDataAdapter("select * from patient", sqlcon);
                    DataSet mypatient = new DataSet();
                    ada.Fill(mypatient, "patient");
                }
            }
            catch(Exception ex)
            {
                //应该输出详细的错误信息,便于定位错误
                MessageBox.Show("连接数据库失败, 详细信息:"+ex.Message);
            }
        }
哇,谢谢了,我发现自己错在哪[/quote] 没事了就结贴吧
加载更多回复(3)

110,566

社区成员

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

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

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