可以';t将子字符串发送到数据库
本文关键字:字符串 数据库 可以 | 更新日期: 2023-09-27 18:13:54
我的目标是将数据从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;
}
}
}
}
你能试试这个吗:
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);
}
}
我建议您通过运行探查器在Sql服务器上开始调试。如果前端没有任何错误,就会有一个调用发送到Sql服务器。
消息设置在哪里?你能给我们看看你所有的代码吗?
您的标签是否设置为这些子字符串值?
如果是,那么你能试试吗-
SaveData(label_Sys.Text,
label_Dia.Text,
label_Pulse.Text);
我的意思是用like-
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();
}
您的连接字符串中似乎有错误,请尝试此连接字符串
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"
;
谢谢大家!我的问题是连接字符串不正确!这是正确的!
string connectionString = @"Data Source=PlUTO-PC';Initial Catalog=merisana;Integrated Security=True";
我在左侧名为服务器资源管理器的面板中发现了它,在那里我根本没看!