2013-05-20 58 views
-7

當我運行我的應用程序時,會發生此問題。 Express Profiler顯示與數據庫的連接發生兩次,所以問題出現在代碼中!爲什麼C#中的值在sql server數據庫中存儲兩次?

代碼示例我在這裏定義發送的內容。

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-

+3

設置一個斷點並遍歷代碼,看看它在做什麼。 – zimdanen

+0

debug&log:在'SaveData'方法中設置斷點並計算該方法命中的次數。這是一個ASP.NET應用程序或桌面應用程序嗎? –

+2

你可能調用過兩次這個方法嗎? –

回答

0

100%確定您所呼叫的方法兩次,嘗試發佈您的面前代碼。 從代碼behing你只是調用一次,但也許按鈕的行爲使它發生兩次。 另外,當爲數據庫查詢創建函數時,嘗試返回一個int而不是使其無效,以便您能夠跟蹤這些事情。 此外,設置一個斷點,看看你有多少次調用SaveData

想將這個像一個評論,但我不能,對不起

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 }); 
    } 
    } 
} 

你保存方法正在從顯示方法中調用,顯然這可以被稱爲不止一次,因爲你在一個while循環。

相關問題