我是想把串口收到的数据存放到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
哥们,你这抄的相当有水平啊,SqlDataReader这个是查询的时候才用到的。cmd赋值后,你要执行啊cmd.ExecuteNonQuery(),不执行哪里可以提交到数据库. C#数据库中的操作分为几个步骤:1、创建数据库连接。2、打开,3、创建命令(含需要执行的语句,参数等),4、执行。http://blog.sina.com.cn/s/blog_4c79302301000ac0.html参考一下人家的,我随便网上搜的,应该能帮到你
两个问题:
1.你的SqlConnection最好不要放在Timer的Tick事件中去打开,因为你每秒执行一次,也就是说每秒都要去连接一次数据库,没必要,把连接放到外面作为一个字段使用比较好。
2.我好像没有看到你执行SQL命令的代码,只看到你不断在添加参数。
在try的最后面添加
int rows=cmd.ExecuteNonQuery();
跟踪一下有没有成功插入数据。
求教啊,我以为很简单很基础的东西,可是就是弄不出来,心累