我的C#出现了问题,每当我尝试在数据库中保存来自串口通信的新数据时,就会出现错误并说
语法不正确' /'
我尝试了每个人给出的每一个建议,但它不会停止......这就是它出来的代码片段。
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SqlConnection cn = new SqlConnection(global::test_new.Properties.Settings.Default.Database3ConnectionString);
try
{
string sql = "INSERT INTO PowerData (Date/Time,Power(W)) values(" + this.powerTextBox.Text + ",'" + this.powerTextBox.Text + "'");
SqlCommand exeSql = new SqlCommand(sql, cn);
cn.Open();
exeSql.ExecuteNonQuery();
this.powerDataTableAdapter.Fill(this.database3DataSet.PowerData);
}
catch (Exception ex)
{
}
}
答案 0 :(得分:3)
您需要转义表格和列名称中的特殊字符,例如/
INSERT INTO PowerData ([Date/Time], Power(W)) values ...
在MySQL中使用反引号来逃避,在MSSQL中使用括号。
答案 1 :(得分:2)
你有一些疯狂的专栏名称。如果要在列名中包含特殊字符,那么必须将它们包装在SQL的括号中,例如[Date/Time]
。更好的想法是首先不要使用这些字符。
答案 2 :(得分:0)
语法应如下所示,使用特殊字符转义所有列
INSERT INTO PowerData
([Date/Time], [Power(W)])
VALUES
(GETDATE(), 'test1')
答案 3 :(得分:0)
首先," this.powerTextBox.Text" - 我猜这两个变量不应该是相同的值
将您的代码更改为:
DateTime dt = DateTime.Parse(this.powerTextBox.Text);
string PowerW = this.powerTextBox.Text;
string sql = "INSERT INTO PowerData ([Date/Time],[Power(W)]) values(@val1, @val2);"
SqlCommand exeSql = new SqlCommand(sql, cn);
exeSql.Parameters.AddWithValue("@val1", dt);
exeSql.Parameters.AddWithValue("@val2", PowerW);
cn.Open();
exeSql.ExecuteNonQuery();