求助,如何在TextBox接收到数据后将数据传到数据库中?

KyKiske22 2014-12-20 09:33:00
RT
串口接收代码如下:
StringBuilder builder = new StringBuilder();//创建可变字符串类
int n = serialPort1.BytesToRead;//定义每次读取的缓存字节长度
Byte[] bytes = new Byte[n];//定义字节数组,长度为接收的缓存字节
serialPort1.Read(bytes, 0, n);
builder.Clear();//每次读取后都清除一次字符串类中的数据
builder.Append(Encoding.ASCII.GetString(bytes));//向字符串类添加收到的字节(转)
txtReceiveData.AppendText(builder.ToString()+" ");//将字符串添加到文本框中

假如数据库(名称为TB0)一共有10行,第一列是代号(已通过建立datagridview1和存储过程存入数据库,列名为C1),第二列是想接收的数据(列名为C2)。就是想知道如和把每次接收的数据传递到数据库中????。。

貌似接收也少加了个接收10次后停止接收的方法。

以上是问题的描述
...全文
306 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
KyKiske22 2014-12-25
  • 打赏
  • 举报
回复
引用 12 楼 andywangguanxi 的回复:
[quote=引用 10 楼 KyKiske22 的回复:] [quote=引用 7 楼 wind_cloud2011 的回复:] 数据库的表的结构又是怎么样的?接收的内容是直接写到一个字段中?我给的只是一个例子,得根据你的实际情况进行修改,我 的例子只给了一个字段,是将文本内容写到这个字段中。
现在情况变了: 接收的内容肯定现在相应的文本框显示,然后在接收的过程中把接收的数据录入到数据库第一行数据中。再一次接收数据,会将数据录入到第二行。。一直录入到第一列总共存在的数量(也就是数据库已经有数据的行数) 现在假设数据库名称为Table.第一列名称是C1,第二列名称是C2,假设现在第一列已知6行数据。现在的目的是录入数据并将它们录入到这6行已知数据的第二列中。[/quote] 这样的需求得用update语句了,代码基本和2楼给出的一样,只是将insert语句改为update。同时,你要考虑每次第二列所谓的录入数据是否要和第一列一一对应(相应的加where条件子句)[/quote] 我写完了,之前就是用Update考虑的。现在建立了两个存储过程,一个是录数的数据列,一个是判断的数据列。思路如你所说~
EdsionWang 2014-12-22
  • 打赏
  • 举报
回复
引用 10 楼 KyKiske22 的回复:
[quote=引用 7 楼 wind_cloud2011 的回复:] 数据库的表的结构又是怎么样的?接收的内容是直接写到一个字段中?我给的只是一个例子,得根据你的实际情况进行修改,我 的例子只给了一个字段,是将文本内容写到这个字段中。
现在情况变了: 接收的内容肯定现在相应的文本框显示,然后在接收的过程中把接收的数据录入到数据库第一行数据中。再一次接收数据,会将数据录入到第二行。。一直录入到第一列总共存在的数量(也就是数据库已经有数据的行数) 现在假设数据库名称为Table.第一列名称是C1,第二列名称是C2,假设现在第一列已知6行数据。现在的目的是录入数据并将它们录入到这6行已知数据的第二列中。[/quote] 这样的需求得用update语句了,代码基本和2楼给出的一样,只是将insert语句改为update。同时,你要考虑每次第二列所谓的录入数据是否要和第一列一一对应(相应的加where条件子句)
KyKiske22 2014-12-22
  • 打赏
  • 举报
回复
引用 8 楼 ww_2446135903 的回复:
private datatier dt = new datatier();//定义datatier类型的私有字段 private void button1_Click(object sender, EventArgs e) { //调用datatier对象的Add()方法向数据库添加数据 dt.Add(new Instance() { Name = txt_name_add.Text, phone = txt_phone_add.Text }); dataGridView1.DataSource = dt.Select();//更新dataGridView1控件中的信息 Clear();//清空TextBox控件中的文本 } //自定义datatier类设置添加程序 public void Add(Instance it) { SqlConnection sc = GetConnection();//调用GetConnections()方法,得到连接对象 try { sc.Open();//打开到数据库的连接 SqlCommand cmd = new SqlCommand(//创建SqlCommand对象 "insert into tb_friend(names,phone) values(@names,@phone)", sc); cmd.Parameters.Add("@names", SqlDbType.VarChar).Value = it.Name;//向SqlCommand对象添加参数 cmd.Parameters.Add("phone", SqlDbType.VarChar).Value = it.phone;//向SqlCommand对象添加参数 cmd.ExecuteNonQuery();//执行SqlCommand对象中的SQL命令 }//codego.net/tags/11/1/ catch (Exception ex)//捕获异常 { Console.WriteLine(ex.Message); } finally { if (sc.State==ConnectionState.Open)//判断是否连接数据库 { sc.Close();//如果已经连接则关闭连接 } } }
我利用SqlDataReader写过这方法,还是达不到要求。貌似得用Update方法 现在情况变了: 接收的内容肯定现在相应的文本框显示,然后在接收的过程中把接收的数据录入到数据库第一行数据中。再一次接收数据,会将数据录入到第二行。。一直录入到第一列总共存在的数量(也就是数据库已经有数据的行数) 现在假设数据库名称为Table.第一列名称是C1,第二列名称是C2,假设现在第一列已知6行数据。现在的目的是录入数据并将它们录入到这6行已知数据的第二列中。
KyKiske22 2014-12-22
  • 打赏
  • 举报
回复
引用 7 楼 wind_cloud2011 的回复:
数据库的表的结构又是怎么样的?接收的内容是直接写到一个字段中?我给的只是一个例子,得根据你的实际情况进行修改,我 的例子只给了一个字段,是将文本内容写到这个字段中。
现在情况变了: 接收的内容肯定现在相应的文本框显示,然后在接收的过程中把接收的数据录入到数据库第一行数据中。再一次接收数据,会将数据录入到第二行。。一直录入到第一列总共存在的数量(也就是数据库已经有数据的行数) 现在假设数据库名称为Table.第一列名称是C1,第二列名称是C2,假设现在第一列已知6行数据。现在的目的是录入数据并将它们录入到这6行已知数据的第二列中。
KyKiske22 2014-12-22
  • 打赏
  • 举报
回复
引用 6 楼 wind_cloud2011 的回复:
你的接收的数据格式是怎么样的?
一列varchar(50)格式,已知的 一列int形式,需要录入的
ww_2446135903 2014-12-22
  • 打赏
  • 举报
回复
private datatier dt = new datatier();//定义datatier类型的私有字段 private void button1_Click(object sender, EventArgs e) { //调用datatier对象的Add()方法向数据库添加数据 dt.Add(new Instance() { Name = txt_name_add.Text, phone = txt_phone_add.Text }); dataGridView1.DataSource = dt.Select();//更新dataGridView1控件中的信息 Clear();//清空TextBox控件中的文本 } //自定义datatier类设置添加程序 public void Add(Instance it) { SqlConnection sc = GetConnection();//调用GetConnections()方法,得到连接对象 try { sc.Open();//打开到数据库的连接 SqlCommand cmd = new SqlCommand(//创建SqlCommand对象 "insert into tb_friend(names,phone) values(@names,@phone)", sc); cmd.Parameters.Add("@names", SqlDbType.VarChar).Value = it.Name;//向SqlCommand对象添加参数 cmd.Parameters.Add("phone", SqlDbType.VarChar).Value = it.phone;//向SqlCommand对象添加参数 cmd.ExecuteNonQuery();//执行SqlCommand对象中的SQL命令 }//codego.net/tags/11/1/ catch (Exception ex)//捕获异常 { Console.WriteLine(ex.Message); } finally { if (sc.State==ConnectionState.Open)//判断是否连接数据库 { sc.Close();//如果已经连接则关闭连接 } } }
wind_cloud2011 2014-12-21
  • 打赏
  • 举报
回复
数据库的表的结构又是怎么样的?接收的内容是直接写到一个字段中?我给的只是一个例子,得根据你的实际情况进行修改,我 的例子只给了一个字段,是将文本内容写到这个字段中。
wind_cloud2011 2014-12-21
  • 打赏
  • 举报
回复
你的接收的数据格式是怎么样的?
KyKiske22 2014-12-21
  • 打赏
  • 举报
回复
引用 3 楼 KyKiske22 的回复:
[quote=引用 2 楼 wind_cloud2011 的回复:] 写个入库的函数,将你每次接收的数据对应入库就是 入库方法类似如下:   SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=table;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand(string.Format("select Count(*) form table where data= '{0}'", textBox.Text), con); if ((int)cmd.ExecuteScalar() > 0) { MessageBox.Show("数据已经存在", "提示"); } else { string sql = "insert into table(data) values('" + textBox.Text + "')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); MessageBox.Show("成功添加"); }
我试了你这方法,不对啊。因为我之前建的表已经有一列已知数据了,现在需要将对应的另一个列的数据填充到TABLE中,我感觉使用UPDATE插入 但怎么都调不出来。
KyKiske22 2014-12-21
  • 打赏
  • 举报
回复
引用 2 楼 wind_cloud2011 的回复:
写个入库的函数,将你每次接收的数据对应入库就是 入库方法类似如下:   SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=table;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand(string.Format("select Count(*) form table where data= '{0}'", textBox.Text), con); if ((int)cmd.ExecuteScalar() > 0) { MessageBox.Show("数据已经存在", "提示"); } else { string sql = "insert into table(data) values('" + textBox.Text + "')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); MessageBox.Show("成功添加"); }
出错了: 在将 varchar 值 'System.Windows.Forms.TextBox, Text: 4' 转换成数据类型 int 时失败。
KyKiske22 2014-12-21
  • 打赏
  • 举报
回复
引用 2 楼 wind_cloud2011 的回复:
写个入库的函数,将你每次接收的数据对应入库就是 入库方法类似如下:   SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=table;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand(string.Format("select Count(*) form table where data= '{0}'", textBox.Text), con); if ((int)cmd.ExecuteScalar() > 0) { MessageBox.Show("数据已经存在", "提示"); } else { string sql = "insert into table(data) values('" + textBox.Text + "')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); MessageBox.Show("成功添加"); }
需不需要把接收的数据存入一个List并转入一个隐藏的textBox中??
wind_cloud2011 2014-12-20
  • 打赏
  • 举报
回复
写个入库的函数,将你每次接收的数据对应入库就是 入库方法类似如下:   SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=table;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand(string.Format("select Count(*) form table where data= '{0}'", textBox.Text), con); if ((int)cmd.ExecuteScalar() > 0) { MessageBox.Show("数据已经存在", "提示"); } else { string sql = "insert into table(data) values('" + textBox.Text + "')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); MessageBox.Show("成功添加"); }
KyKiske22 2014-12-20
  • 打赏
  • 举报
回复
忘说了 上面的接收方法是在异步线程里的 this.BeginInvoke((EventHandler) (delegate { 上面的接收方法 }));

110,536

社区成员

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

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

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