从串行端口接收的数据无法正确保存Access数据库

小队

新成员
已加入
2018年2月22日
留言内容
3
编程经验
Beginner
大家好,我是C#新手
我开发了测试实用程序
目前,我从Device收到了字符串。

D1U1802200000000000001000000S009000570101640640500851202880033800265003140015000536000280001400048004420013100098002530

并尝试保存在Access数据库中。

我的问题是我的数据没有保存在访问单个记录中。将数据保存在多路记录中。


C#:
namespace MYabc21_Final
{
    public partial class TestingUtilityForm : TemplateForm
    {
        OleDbConnection connection = new OleDbConnection();

        // String DataOut;
        String DataIN;
        public TestingUtilityForm()
        {
            InitializeComponent();
            
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Interfacing.accdb";
        }

        private void TestingUtilityForm_Load(object sender, EventArgs e)
        {
            connection.Open();
            connectionStatusLabel.Text = "Connection Establish";
            connection.Close();

            // Create Function to get Serial Port 
            string[] ports = SerialPort.GetPortNames();
            comPortsComboBox.Items.AddRange(ports);            
        }

        private void openButton_Click(object sender, EventArgs e)
        {
            尝试
            {
                serialPort1.PortName = comPortsComboBox.Text;
                serialPort1.BaudRate = Convert.ToInt32(baudComboBox.Text);
                serialPort1.DataBits = Convert.ToInt32(dataBitsComboBox.Text);
                serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBitsComboBox.Text);
                serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), parityComboBox.Text);
                serialPort1.Open();
                progressBar1.Value = 100;
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message,"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void closeButton_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                progressBar1.Value = 0;
            }
        }

        private void serialPort1_DataReceived(对象发送者,SerialDataReceivedEventArgs e)
        {
            DataIN = serialPort1.ReadExisting();
           // this.Invoke(new EventHandler(ShowData));
            
            尝试
            {
               字符串databasedata = DataIN;
               connection.Open();
               OleDbCommand命令=新的OleDbCommand();
               command.Connection =连接;
               command.CommandText ="插入tblData(MYdata)值('"+databasedata+"')";
               command.ExecuteNonQuery();
               DataIN = null;
               connection.Close();
             
            }
            抓住(前例外)
            {
                MessageBox.Show("error"+ex);
            }
        }

        private void ShowData(object sender, EventArgs e)
        {
            int dataINLength = DataIN.Length;
            dataInLengthLabel.Text = String.Format("{0:00}", DataIN.Length);

          INdataTextBox.Clear();
        INdataTextBox.Text += DataIN;
        }

        private void clearButton_Click(object sender, EventArgs e)
        {
            INdataTextBox.Text = "";
            dataInLengthLabel.Text = "";
        }

        private void INdataTextBox_TextChanged(object sender, EventArgs e)
        {
           int DataOutLength = INdataTextBox.TextLength;
          dataInLengthLabel.Text = String.Format("{0:00}", DataOutLength);
        }

        private void showDataButton_Click(object sender, EventArgs e)
        {
            尝试
            {
                connection.Open();
                OleDbCommand命令=新的OleDbCommand();
                command.Connection =连接;
                string query = "select * from tblData";
                command.CommandText =query;

                OleDbDataAdapter da = new OleDbDataAdapter(command);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridView1.DataSource = dt;

                connection.Close();
            }
            抓住(前例外)
            {
                MessageBox.Show("error" + ex);
            }
        }
    }
    }
 

附件

  • 数据问题
    数据问题
    15 KB · 观看次数: 89

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
您是否调试了代码?如果没有,您应该在发布之前执行此操作。设置一个断点并逐行浏览代码。然后,您将能够准确地查看代码的行为以及与您期望的代码有何不同。如果您仍然不能解决问题,至少您可以向我们提供所有相关信息,并且还可以找出与之相关的代码并仅发布。

关于代码主题,请不要发布包含大量空白的代码段。这只会使代码更难阅读。很少有理由在任何两行代码之间都留有多个空白行,也没有理由要发布空方法或注释掉的代码行。期望我们所有人都阅读这本书真是懒惰,因为您不想花时间消除与问题无关的内容。
 

小队

新成员
已加入
2018年2月22日
留言内容
3
编程经验
Beginner
你好 金西尼 感谢您的重放,设置断点并逐步执行我的代码。我的数据传输成功。当删除断点并运行程序时显示错误。我认为通过更新数据库 单独的线程。
请告诉我如何创建自定义线程。每当从串口接收到的数据自动在数据库中安全。


--------------------------------------------
rivate void serialPort1_DataReceived(对象发送者,SerialDataReceivedEventArgs e)
{
//从Serail端口读取数据
DataIN + = serialPort1.ReadExisting();
//在字符串DataIN中接收到的数据值并存储到数据库
尝试
{
字符串databasedata = DataIN;
connection.Open();
OleDbCommand命令=新的OleDbCommand();
command.Connection =连接;
command.CommandText ="插入tblData(MYdata)值('"+databasedata+"')";
command.ExecuteNonQuery();
DataIN = null;
connection.Close();
}
抓住(前例外)
{
MessageBox.Show("error"+ex);
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
当删除断点并运行程序时显示错误

什么错该异常包含许多旨在帮助诊断问题的信息,尤其是错误消息。如果您希望我们帮助诊断问题,则逻辑要求您将这些信息传递给我们。
 

小队

新成员
已加入
2018年2月22日
留言内容
3
编程经验
Beginner
没有错误显示Try Catch没有显示任何错误。代码运行成功。我的问题是为什么我的数据不能以单个记录的形式保存。从串口接收的数据保存在多记录中。
多记录
数据串2

单条记录
数据串
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
因此,您是在说而不用说吗?当您使用断点并单步执行代码时,所有数据最终都存储在一条记录中,而在调试器中没有中断时,数据全部存储在一条记录中?如果是这样,您将断点放在哪里?如果是在调用ReadExisting之前,那么很明显的结论是,除非您在调用之前暂停,否则现有数据不是全部数据。如果将断点放置在该调用之后,则应该很明显。如果一次仅获取部分数据,则必须等到拥有记录的所有数据后再添加记录,而不是每次接收数据时都添加记录。
 
最佳 底部