lin13727561057
lin13727561057
采纳率50%
2017-08-16 02:09 浏览 900

C#Winforms 连接数据库后无法存数据到数据库

20

我是想把串口收到的数据存放到SQL数据库。串口收到的数据解析后在label控件上显示。我用一个存储过程把label显示的数据存放到数据库里,使用一个Timer控件每隔1秒存一次数据,程序没有任何报错,运行也正常,数据库连接测试也成功,可是就是不能把数据放进数据库,自己弄了好久还是不知道为什么,求大神指点一下。没学过C#,数据库也差不多,东西都是自己模仿别人
的,麻烦懂的朋友帮帮忙。
public string str = new ConnString().str;
private void timer2_Tick(object sender, EventArgs e)
{

        SqlConnection conn = null;
        SqlDataReader rdr = null;

        try
        {
            conn = new SqlConnection(str);
            conn.Open();
            SqlCommand cmd = new SqlCommand("jiedian1Insert", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter pWendu1 =
                new SqlParameter("@pwendu1", SqlDbType.VarChar, 10);
            pWendu1.Direction = ParameterDirection.Input;
            pWendu1.Value = Convert.ToString(wendu1.Text);
            cmd.Parameters.Add(pWendu1);

            SqlParameter pShidu1 =
                    new SqlParameter("@pshidu1", SqlDbType.VarChar, 10);
            pShidu1.Direction = ParameterDirection.Input;
            pShidu1.Value = Convert.ToString(shidu1.Text);
            cmd.Parameters.Add(pShidu1);

            SqlParameter pGuangzhao1 =
                        new SqlParameter("@pguangzhao1", SqlDbType.VarChar, 10);
            pGuangzhao1.Direction = ParameterDirection.Input;
            pGuangzhao1.Value = Convert.ToString(guangzhao1.Text);
            cmd.Parameters.Add(pGuangzhao1);

            SqlParameter pFire1 =
                            new SqlParameter("@pfire1", SqlDbType.VarChar, 10);
            pFire1.Direction = ParameterDirection.Input;
            pFire1.Value = Convert.ToString(fire1.Text);
            cmd.Parameters.Add(pFire1);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
            if (rdr != null)
            {
                rdr.Close();
            }
        }

                    这是存储过程的代码:
                    USE [zigbee]

GO

/****** Object: StoredProcedure [dbo].[jiedian1Insert] Script Date: 2017/8/16 9:50:54 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[jiedian1Insert]
@pwendu1 varchar(10),
@pshidu1 varchar(10),
@pguangzhao1 varchar(10),
@pfire1 varchar(10)

AS
BEGIN
INSERT INTO jiedian1(wendu1,shidu1,guangzhao1,fire1)
VALUES(@pwendu1,@pshidu1,@pguangzhao1,@pfire1)
END

GO


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答 默认 最新

  • 已采纳
    gdgqlai Joshua Lai 2017-08-18 09:28

    哥们,你这抄的相当有水平啊,SqlDataReader这个是查询的时候才用到的。cmd赋值后,你要执行啊cmd.ExecuteNonQuery(),不执行哪里可以提交到数据库. C#数据库中的操作分为几个步骤:1、创建数据库连接。2、打开,3、创建命令(含需要执行的语句,参数等),4、执行。http://blog.sina.com.cn/s/blog_4c79302301000ac0.html参考一下人家的,我随便网上搜的,应该能帮到你

    点赞 评论 复制链接分享
  • lhtcdj6 lhtcdj6 2017-08-16 02:20

    两个问题:
    1.你的SqlConnection最好不要放在Timer的Tick事件中去打开,因为你每秒执行一次,也就是说每秒都要去连接一次数据库,没必要,把连接放到外面作为一个字段使用比较好。
    2.我好像没有看到你执行SQL命令的代码,只看到你不断在添加参数。

    点赞 评论 复制链接分享
  • lqf336 梁清锋 2017-08-16 02:29

    在try的最后面添加

     int rows=cmd.ExecuteNonQuery();
    

    跟踪一下有没有成功插入数据。

    点赞 评论 复制链接分享
  • lin13727561057 lin13727561057 2017-08-16 09:15

    求教啊,我以为很简单很基础的东西,可是就是弄不出来,心累

    点赞 评论 复制链接分享

相关推荐