有人可以解释这个例外的含义吗?连接字符串、表名、查询语法正确

本文关键字:字符串 连接 表名 语法 查询 解释 | 更新日期: 2023-09-27 18:32:16

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO tbl_AStatus (Asset Status,Remarks) VALUES (@a, @b)", Login.sqlConn);
cmd.Parameters.AddWithValue("@a", txtAssetStatus.Text);
cmd.Parameters.AddWithValue("@b", txtRemarks.Text);
int a = cmd.ExecuteNonQuery();
MessageBox.Show(a.ToString());

显示的异常:

解析查询时出错。[令牌行号=1,令牌 行偏移量 = 32,标记错误 = 状态 ]

有人可以解释这个例外的含义吗?连接字符串、表名、查询语法正确

如果您的表名或列名包含空格,则需要将它们与方括号一起使用,例如 [Asset Status] 。但不建议这样做。如果可以的话,最好将您的列名称更改为其他名称。

阅读:数据库、表和列命名约定?

还可以使用 using 语句来释放数据库连接和对象。

using(SqlCeCommand cmd = Login.sqlConn.CreateCommand())
{
   cmd.CommandText = "INSERT INTO tbl_AStatus ([Asset Status],Remarks) VALUES (@a, @b)";
   cmd.Parameters.Add("@a", SqlDbType.NVarChar).Value = txtAssetStatus.Text;
   cmd.Parameters.Add("@b", SqlDbType.NVarChar).Value = txtRemarks.Text;
   // I assume your column types are NVarChar
   Login.sqlConn.Open();
   int a = cmd.ExecuteNonQuery();
   MessageBox.Show(a.ToString());
}

并且不要使用AddWithValue方法。它有时可能会产生意想不到的结果。使用SqlParameterCollection.Add方法,它是重载。

阅读:我们可以停止使用AddWithValue()吗?