我正在尝试修改数据库中的表,如下所示:
using (SqlCeCommand com = new SqlCeCommand("INSERT INTO RamResults(Result, Date) VALUES(@num, @date)", con))
{
com.Parameters.AddWithValue("@num", num);
com.Parameters.AddWithValue("@hostname2", hostname2);
com.Parameters.AddWithValue("@date", Form1.date);
com.ExecuteNonQuery();
}
虽然表名有变量前缀(hostname2)。所以我尝试执行以下操作:
("INSERT INTO @hostname2 + RamResults(Result, Date) VALUES(@num, @date)", con))
但是没有运气,有人有解决这个问题的想法吗?
错误信息:
There was an error parsing the query. [ Token line number = 1,Token line offset = 13,Token in error = @hostname2 ]
最佳答案
如果您使用这样的准备语句,@hostname2
将被替换为 'value'
。
您应该改用 string.Format()
:
string hostprefix = 'host2_'; // example
string sql = string.Format("INSERT INTO {0}RamResults(Result, Date) "+
" VALUES(@num, @date)", hostprefix);
using (SqlCeCommand com = new SqlCeCommand(sql, con))
// ....
但只使用 string.Format 作为您的主机前缀,而不是用于用户输入!这样您就可以防止 SQL 注入(inject)。
关于c# - 在使用 SQL 和 C# 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211646/