无法将子字符串发送到数据库

时间:2013-05-15 09:33:47

标签: c# sql-server database

我的目标是将数据从C#发送到SQL服务器,在DB端没有任何反应。可能是什么问题?也许它在DB端有错误的数据类型?

获取字符串并发送它的代码。

完整代码

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

5 个答案:

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

}

答案 1 :(得分: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();
        }

答案 2 :(得分:0)

我建议您通过运行探查器在Sql服务器上开始调试。如果前端没有任何类型的错误,那么就会有一个调用发送到Sql server。

答案 3 :(得分: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";

答案 4 :(得分:0)

谢谢大家!我的问题是错误的连接字符串!这是正确的!

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

我在名为Server Explorer的左侧面板中发现了它,我在那里看不到所有内容!