【问题标题】:Why values from C# getting stored twice in the sql server database?为什么 C# 中的值会在 sql server 数据库中存储两次?
【发布时间】:2013-05-20 14:26:33
【问题描述】:

当我运行我的应用程序时会出现此问题。 Express Profiler 显示与数据库的连接发生了两次,因此问题出在代码中!

代码示例我在这里定义要发送的内容。

label_Map.Text = message.Substring(21, 3);
                label_Sys.Text = message.Substring(15, 3);
                label_Dia.Text = message.Substring(18, 3);
                label_Pulse.Text = message.Substring(26, 3);

                //System.IO.File.WriteAllText(@"D:\String.txt", label_Sys.Text);
                //System.IO.File.WriteAllText(@"D:\String.txt", label_Dia.Text);
                //System.IO.File.WriteAllText(@"D:\String.txt", label_Pulse.Text);

                SaveData(

               message.Substring(15, 3),
               message.Substring(18, 3),   
               message.Substring(26, 3)
                    //label_Sys.Text,
                    //label_Dia.Text,
                    //label_Pulse.Text

在这里发送代码

 private void SaveData(string sys, string dia, string pulse)
    {
        try
        {
            string connectionString = @"Data Source=PlUTO-PC\;Initial Catalog=merisana;Integrated Security=True";
            using (SqlConnection connection = new SqlConnection(connectionString))


            {

               // connection.Open();
                string queryString = "INSERT INTO dbo.merisana_test (sys, dia, pulse) VALUES (@sys, @dia, @pulse)";
                SqlCommand command = new SqlCommand(queryString, connection);
                //command.CommandText = string.Format("INSERT INTO merisana1 (sys, dia, pulse) VALUES ({0}, {1}, {2})", sys, dia, pulse);


                command.Parameters.AddWithValue("@sys", sys);
                command.Parameters.AddWithValue("@dia", dia);
                command.Parameters.AddWithValue("@pulse", pulse);

                command.Connection.Open();
                command.ExecuteNonQuery();
            }
        }
        catch (SqlException ex)
        {
            Console.WriteLine(ex.Message);
        }

    }

完整代码在这里https://www.dropbox.com/s/4oitl0p3ldcfo79/Form1.cs?v=0swn-

【问题讨论】:

  • 设置断点并单步执行您的代码以查看它在做什么。
  • 调试和日志:在SaveData 方法中设置断点并计算该方法被命中的次数。这是 ASP.NET 应用还是桌面应用?
  • 你是否调用了两次该方法?
  • 由于老大哥过滤器工作无法访问您的保管箱,但可能无论您的顶级代码 sn-p 来自哪个事件,都被调用了两次。您粘贴的代码看起来不错。
  • 投了反对票,因为您真的只需要单步执行您的代码并准确地观察事情发生的时间。如果由于任何原因无法附加调试器,请尝试记录到文件,甚至是消息框弹出窗口。

标签: c# sql sql-server database


【解决方案1】:

你需要调试这段代码:

string buffer = "";

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  while (serialPort1.BytesToRead > 0)
  {
    buffer += serialPort1.ReadTo("\r");

    int index1 = buffer.IndexOf('\u0002');
    int index2 = buffer.IndexOf('\u0003', index1 + 1);
    string buf = "";
    if ((index1 >= 0) && (index2 > index1))
    {
      buf = buffer.Substring(index1 + 1, (index2 - 1 - index1));
      buffer = buffer.Remove(index1, (index2  - index1));
      this.BeginInvoke(new displayDeleg(display), new object[] { buf });
    }
  }
}

您的 save 方法正在从 display 方法中调用,显然这可以被多次调用,因为您处于 while 循环中。

【讨论】:

    【解决方案2】:

    100% 确定您调用该方法两次,尝试发布您的前端代码。 从代码开始,您只需要调用一次,但按钮的行为可能会使其发生两次。 此外,在为数据库查询创建函数时,尝试返回一个 int 而不是使其为 void,这样您就可以跟踪这些事情。 另外,设置一个断点,看看你调用了多少次SaveData

    想发表评论,但我不能,抱歉

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 2017-12-04
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多