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

我是想把串口收到的数据存放到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个回答

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

lin13727561057
lin13727561057 不过还是谢谢你
2 年多之前 回复
lin13727561057
lin13727561057 可以,加了cmd.ExecuteNonQuery()就行了,只是我没用到SqlDataReader;然后我可不是抄的,只是模仿别人的代码,代码也是老师给的,不算抄袭吧,只是技术不到家,见笑了
2 年多之前 回复

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

lhtcdj6
lhtcdj6 回复lin13727561057: cmd.Parameters.Add(pWendu1);这些知识添加参数而已,不是执行命令的
2 年多之前 回复
lin13727561057
lin13727561057 第一个问题我懂了,第二个问题cmd.Parameters.Add(pWendu1);这些不是执行命令的代码吗?
2 年多之前 回复

在try的最后面添加

 int rows=cmd.ExecuteNonQuery();

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

lin13727561057
lin13727561057 int rows = cmd.ExecuteNonQuery(); row.Text = rows.ToString(); 显示一直为空,什么都没有,也就是说我的sql语句没有执行,请问怎么弄,给点意见,新手不知如何是好,报错就会自己去找,可是这种真的不会
2 年多之前 回复
lin13727561057
lin13727561057 在try()里面最后添加
2 年多之前 回复
lin13727561057
lin13727561057 添加了后执行,没什么反映,请问这个函数怎么用的,说是返回受影响行数
2 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问