C# 为什么需要SqlCeCommand.Parameters.AddWithValue()来插入值?

C# 为什么需要SqlCeCommand.Parameters.AddWithValue()来插入值?,c#,wpf,sql-server-ce,C#,Wpf,Sql Server Ce,我有一个C#WPF桌面应用程序,它使用SQLCompact3.5作为嵌入式数据库。 在插入函数中,它具有 using (SqlCeCommand com = new SqlCeCommand( "INSERT INTO FooTable VALUES(@num)", con)) { com.Parameters.AddWithValue("@num", num); com.ExecuteNonQuery(); } 我不明白com.Parameters.AddWithVa

我有一个C#WPF桌面应用程序,它使用SQLCompact3.5作为嵌入式数据库。 在插入函数中,它具有

using (SqlCeCommand com = new SqlCeCommand(
    "INSERT INTO FooTable VALUES(@num)", con))
{
    com.Parameters.AddWithValue("@num", num);
    com.ExecuteNonQuery();
}

我不明白com.Parameters.AddWithValue()是关于什么的。我注释掉了这行代码,插入函数的运行方式完全相同。我以为ExecuteOnQuery执行插入,那么这个Parameters.AddWithValue是什么呢

@num
是一个TSQL参数。如果没有
AddWithValue(@num,num)
,则既没有定义也没有分配值。如果省略了参数,它将无法工作,即使省略了:它从何处获取您选择的值(
num
)?绝对最好的方法是使用
null
,这不是您的意图;更典型的情况是,它将无法执行(您确定您没有在某个地方接受异常吗?)


请注意,不建议将值连接到字符串本身中;这将导致SQL注入风险,并会降低性能(计划重用;不确定这是否适用于CE-CE可能不会对缓存的计划产生麻烦)。

@num
是一个TSQL参数。如果没有
AddWithValue(@num,num)
,则既没有定义也没有分配值。如果省略了参数,它将无法工作,即使省略了:它从何处获取您选择的值(
num
)?绝对最好的方法是使用
null
,这不是您的意图;更典型的情况是,它将无法执行(您确定您没有在某个地方接受异常吗?)

请注意,不建议将值连接到字符串本身中;这将导致SQL注入风险,并会降低性能(计划重用;但不确定这是否适用于CE-CE可能不会对缓存的计划产生麻烦)