2013-05-15 73 views
3

我的目標是從C#發送數據到SQL服務器,在數據庫端沒有任何反應。可能是什麼問題?也許它在數據庫端的錯誤數據類型?不能發送子串到數據庫

獲取字符串併發送它的代碼。

的完整代碼

namespace NIBP2PC 
{ 
    public partial class Form1 : Form 
    { 
     private delegate void displayDeleg(string message); 

     const string STX = "\u0002"; //Start 
     const string ETX = "\u0003"; //End 
     const string STARTMEAS = "01;;D7"; //Command Values 
     const string STOPMEAS = "X"; 
     const string SETCYCLE0 = "03;;D9"; // Manual mode 
     const string SETCYCLE1 = "04;;DA"; // 1 min 
     const string SETCYCLE2 = "05;;DB"; // 2 min 
     const string SETCYCLE3 = "06;;DC"; // 3 min 
     const string SETCYCLE4 = "07;;DD"; // 4 min 
     const string SETCYCLE5 = "08;;DE"; // 5 min 
     const string SETCYCLE10 = "09;;DF"; // 10 min 
     const string SETCYCLE15 = "10;;D7"; // 15 min 
     const string SETCYCLE30 = "11;;D8"; // 30 min 
     const string SETMANO = "14;;DB"; // Manometer mode 
     const string SETREBOOT = "15;;DC"; // Reset Board 
     const string SETLEAK = "17;;DE"; // Leakage Test 
     const string READSTATUS = "18;;DF"; // Read Result 
     const string SETPMP100 = "19;;E0"; // Set start pressure 100mmHg 
     const string SETPMP120 = "20;;D8"; // Set start pressure 120mmHg 
     const string SETPMP140 = "21;;D9"; // Set start pressure 140mmHg 
     const string SETPMP160 = "22;;DA"; // Set start pressure 160mmHg 
     const string SETPMP180 = "23;;DB"; // Set start pressure 180mmHg 
     const string SETADULT = "24;;DC"; // Set Adult Mode 
     const string SETNEO = "25;;DD"; // Set Neo Mode 

     const byte INIT = 0;   //Not measured up to now 
     const byte OK = 1;   // Status Values 
     const byte RSTAT = 2;   // Read Status 
     const byte RPRESS = 3; 

     byte V_Cycle; 
     byte V_Pumpup; 
     int V_Map; 

     // private VerticalProgressBar bar1 = new VerticalProgressBar(); 
     public Form1() 
     { 
      InitializeComponent(); 
      list_comport(); 
     } 
     private void list_comport() 
     { 
      // Get a list of serial port names. 
      string[] ports = SerialPort.GetPortNames(); 

      // Display each port name to the console. 
      foreach (string port in ports) 
      { 
       portToolStripMenuItem.DropDownItems.Add(port, null, new EventHandler(port_Click)); 
      } 
     } 

     private void port_Click(object sender, EventArgs e) 
     { 
      if (serialPort1.IsOpen) 
       serialPort1.Close(); 
      serialPort1.ReadBufferSize = 64; 
      serialPort1.ReceivedBytesThreshold = 2; 
      string Port = sender.ToString(); 
      serialPort1.PortName = Port; 
      try 
      { 
       serialPort1.Open(); 
      } 
      catch 
      { 
       MessageBox.Show("Serial port " + serialPort1.PortName + 
         " cannot be opened!", "RS232 tester", 
         MessageBoxButtons.OK, MessageBoxIcon.Warning); 

      }; 
      toolStripStatusLabel_Com.Text = Port; 

      Send_command(SETCYCLE0); 
      Send_command(SETADULT); 
      label_Status.Text = "IDLE"; 
      label_Cycle.Text = "Manual"; 
      label_Patient.Text = "Adult"; 
      label_Pump.Text = "160 mmHg"; 
      V_Cycle = 0; 
      V_Pumpup = 3; 
      Send_command(SETPMP160); 
      Send_command(READSTATUS);  // Read status values 
     } 

     private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 

     private void aboutToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      AboutBox1 about = new AboutBox1(); 
      about.Show(); 
     } 

     private void button_Read_Click(object sender, EventArgs e) 
     { 
      Send_command(READSTATUS); 
     } 

     private void button_Cycle_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       if (V_Cycle < 8) 
        V_Cycle++; 
       else V_Cycle = 0; 

       switch (V_Cycle) 
       { 
        case 0: 
         Send_command(SETCYCLE0); 
         label_Cycle.Text = "Manual"; 
         break; 
        case 1: 
         Send_command(SETCYCLE1); 
         label_Cycle.Text = "1 min"; 
         break; 
        case 2: 
         Send_command(SETCYCLE2); 
         label_Cycle.Text = "2 min"; 
         break; 
        case 3: 
         Send_command(SETCYCLE3); 
         label_Cycle.Text = "3 min"; 
         break; 
        case 4: 
         Send_command(SETCYCLE4); 
         label_Cycle.Text = "4 min"; 
         break; 
        case 5: 
         Send_command(SETCYCLE5); 
         label_Cycle.Text = "5 min"; 
         break; 
        case 6: 
         Send_command(SETCYCLE10); 
         label_Cycle.Text = "10 min"; 
         break; 
        case 7: 
         Send_command(SETCYCLE15); 
         label_Cycle.Text = "15 min"; 
         break; 
        case 8: 
         Send_command(SETCYCLE30); 
         label_Cycle.Text = "30 min"; 
         break; 
        default: 
         break; 
       } 
      } 
     } 

     private void Send_command(String command) 
     { 
      if (serialPort1.IsOpen) 
      { 
       serialPort1.Write(STX);  // STX = 2 
       serialPort1.Write(command); 
       serialPort1.Write(ETX);  // ETX = 3     
      } 
     } 

     private void button_Patient_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       if (label_Patient.Text == "Adult") 
       { 
        Send_command(SETNEO); 
        label_Patient.Text = "Neonate"; 
        label_Pump.Text = "100 mmHg"; 
        V_Pumpup = 0; 
       } 
       else if (label_Patient.Text == "Neonate") 
       { 
        Send_command(SETADULT); 
        label_Patient.Text = "Adult"; 
        label_Pump.Text = "160 mmHg"; 
        V_Pumpup = 3; 
       } 
      } 
     } 

     private void button_Pump_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       if (label_Patient.Text == "Neonate") 
       { 
        if (V_Pumpup < 2) 
         V_Pumpup++; 
        else 
         V_Pumpup = 0; 
       } 
       if (label_Patient.Text == "Adult") 
       { 
        if ((V_Pumpup < 4) && (V_Pumpup >= 2)) 
         V_Pumpup++; 
        else 
         V_Pumpup = 2; 
       } 
       switch (V_Pumpup) 
       { 
        case 0: 
         Send_command(SETPMP100); 
         label_Pump.Text = "100 mmHg"; 
         break; 
        case 1: 
         Send_command(SETPMP120); 
         label_Pump.Text = "120 mmHg"; 
         break; 
        case 2: 
         Send_command(SETPMP140); 
         label_Pump.Text = "140 mmHg"; 
         break; 
        case 3: 
         Send_command(SETPMP160); 
         label_Pump.Text = "160 mmHg"; 
         break; 
        case 4: 
         Send_command(SETPMP180); 
         label_Pump.Text = "180 mmHg"; 
         break; 
       } 
      } 
     } 

     private void button_Start_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       Send_command(STARTMEAS); 
       //Ser_Stat = RPRESS; 
       label_Status.Text = "MEASURE"; 
       label_Statusstring.Text = ""; 
       label_Sys.Text = ""; 
       label_Dia.Text = ""; 
       label_Pulse.Text = ""; 
      } 
     } 

     private void button_Mano_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       Send_command(SETMANO); 
       label_Map.Text = ""; 
       //Ser_Stat = RPRESS; 
       label_Status.Text = "Manometer"; 
      } 
     } 

     private void button_Leak_Click(object sender, EventArgs e) 
     { 
      if (label_Status.Text == "IDLE") 
      { 
       if (label_Patient.Text == "Neonate") 
       { 
        button_Patient.PerformClick(); 
       } 
       Send_command(SETLEAK); 
       //Ser_Stat = RPRESS; 
       label_Status.Text = "Leaktest"; 
       label_Statusstring.Text = ""; 
       label_Sys.Text = ""; 
       label_Dia.Text = ""; 
       label_Pulse.Text = ""; 
      } 
     } 

     private void button_Break_Click(object sender, EventArgs e) 
     { 
      Send_command(STOPMEAS); 
      label_Status.Text = "IDLE"; 
      V_Map = 0; 
      label_Sys.Text = "---"; 
      label_Dia.Text = "---"; 
      label_Pulse.Text = "---"; 
      label_Map.Text = "---"; 
     } 

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

     private void display(string message) 
     { 
      label_Statusstring.Text = message; 
      label_Statusstring.ForeColor = Color.Black; 
      if (message.Length > 3) 
      { 
       if ((message.Substring(5, 1)).Contains("S")) 
       { 
        string temp = message.Substring(6, 1); 
        switch (temp) 
        { 
         case "3": 
          label_Status.Text = "MEASURE"; 
          break; 
         case "4": 
          label_Status.Text = "Manometer"; 
          break; 
         case "7": 
          label_Status.Text = "Leaktest"; 
          break; 
         default: 
          label_Status.Text = "IDLE"; 
          break; 
        } 

        label_Map.Text = message.Substring(0, 3); 
        if (label_Map.Text != "") 
         V_Map = Convert.ToInt16(label_Map.Text); 
        if (V_Map < 300) { } 
         bar1.Value = V_Map; 
       } 

       else 
       { 
        if ((message.Substring(0, 1)).Contains("S")) 
        { 
         string temp = message.Substring(1, 1); 
         switch (temp) 
         { 
          case "2": 
           label_Statusstring.ForeColor = Color.Red; 
           break; 
          case "3": 
           label_Status.Text = "MEASURE"; 
           break; 
          case "4": 
           label_Status.Text = "Manometer"; 
           break; 
          case "7": 
           label_Status.Text = "Leaktest"; 
           break; 
          default: 
           label_Status.Text = "IDLE"; 
           break; 
         } 
        } 
        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); 

        SaveData(
         message.Substring(15, 3), 
         message.Substring(18, 3), 
         message.Substring(26, 3)); 
       } 
      } 
      else if (message.Contains("999")) 
      { 
       Send_command(READSTATUS); 
       label_Status.Text = "IDLE"; 
       bar1.Value = 0; 
      } 
     } 

     private void SaveData(string sys, string dia, string pulse) 
     { 
      try 
      { 
       string connectionString = @"Data Source=PLUTO-PC\;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\spiediena_merisana.mdf;Integrated Security=True;User Instance=True"; 
       using (SqlConnection connection = new SqlConnection(connectionString)) 
       { 
        string queryString = "INSERT INTO merisana1 (sys, dia, pulse) VALUES (@sys, @dia, @pulse)"; 
        SqlCommand command = new SqlCommand(queryString, connection); 

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

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      toolStripStatusLabel_time.Text = DateTime.Now.ToLongTimeString(); 
     } 
    } 

    public class VerticalProgressBar : ProgressBar 
    { 
     protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       cp.Style |= 0x04; 
       return cp; 
      } 
     } 
    } 
} 
+2

你正在得到什麼錯誤? –

+0

沒有錯誤,只是沒有插入數據庫.. –

+0

你有沒有調試你的代碼。由於您在處理異常,因此沒有運行時異常可能會注意到您? –

回答

0

你能試試這個:

private void SaveData(string sys, string dia, string pulse) 
{ 
    try 
    { 
     string connectionString = @"Data Source=(local);AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\spiediena_merisana.mdf;Integrated Security=True;User Instance=True"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      string queryString = "INSERT INTO merisana1 (sys, dia, pulse) VALUES (@sys, @dia, @pulse)"; 
      SqlCommand command = new SqlCommand (queryString, connection);   

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

} 
+2

而不是盯着幾乎相同的一段代碼,你應該幫忙提一下,製成或指出什麼是實際導致此錯誤 – V4Vendetta

+0

錯誤\t \t 1「System.Data.SqlClient.SqlCommand」不包含關於「連接」和沒有擴展方法「連接」接受型的第一參數「System.Data的定義.SqlClient。SqlCommand的」可以找到(是否缺少using指令或程序集引用?) –

+0

假設的connectionString是正確的,我剛纔已經改變了你執行一個查詢到SQL Server的方式。我已符合性與文檔:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx @Sandis Menska:我也更新了代碼。 – cvraman

0

在哪裏得到的消息設置?你能告訴我們你的所有代碼嗎?

是你的標籤越來越設置爲這些子價值?

如果是的話,那麼可以嘗試像 -

SaveData(label_Sys.Text, 
    label_Dia.Text, 
    label_Pulse.Text); 

我的意思是使用像 -

using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 

     string queryString = "INSERT INTO merisana1 (sys, dia, pulse) VALUES (@sys, @dia, @pulse)"; 
      SqlCommand command = new SqlCommand (queryString, connection);   

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

      command.ExecuteNonQuery(); 
     } 
+0

全部代碼添加 –

+0

還是什麼都沒有.. –

+0

沒有得到所有的答案。您的標籤是否設置爲這些子字符串值?好吧......還有一件事....你是在添加參數後,打開連接。你可以先打開它,然後創建命令對象。 – Amit

0

我會建議你通過運行一個分析器啓動SQL Server上調試。如果前端沒有任何錯誤,則會有一個呼叫發送到Sql服務器。

+0

沒有錯誤,並且沒有結果 –

0

似乎有是你的連接字符串中的錯誤嘗試這個連接字符串

string connectionString = @"Data Source=PLUTO-PC\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\spiediena_merisana.mdf;Integrated Security=True;User Instance=True";

+0

我使用sql server 2008 r8和VB2010,我有2個實例,一個是本地(MSSQLSERVER)和SQLEXPRESS和Im使用第一個 –

0

謝謝大家!我的問題是incornct connectionstring!這是正確的!

string connectionString = @"Data Source=PlUTO-PC\;Initial Catalog=merisana;Integrated Security=True"; 

我叫服務器資源管理器,左側面板,我沒看都發現了它!