C# 使用C将列添加到SQLServerCE表#

C# 使用C将列添加到SQLServerCE表#,c#,sql-server-ce,C#,Sql Server Ce,我正在尝试使用C#代码向CE数据库中的表中添加一个新列 此SQL在SSMS中工作,以添加到标准SQL数据库表: IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'sent' AND Object_ID = Object_ID(N'QAReports')) BEGIN ALTER TABLE QAReports ADD [Sent] bit NULL; END 但是当我尝试在C#中运行相同的sql时,我得到了一个错误: 分析查询时

我正在尝试使用C#代码向CE数据库中的表中添加一个新列

此SQL在SSMS中工作,以添加到标准SQL数据库表:

IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'sent' AND Object_ID = Object_ID(N'QAReports')) BEGIN 
  ALTER TABLE QAReports ADD [Sent] bit NULL;
END
但是当我尝试在C#中运行相同的sql时,我得到了一个错误:

分析查询时出错。[令牌行编号=1,令牌行偏移量=1,令牌出错=IF]

我用来执行上述SQL的代码是:

bool retVal = true;
try
{
    using (var connection = new SqlCeConnection(ConnString))
    {
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText = sql;
            command.CommandType = CommandType.Text;
            command.ExecuteNonQuery();
        }
        connection.Close();
    }
}
catch (Exception ex)
{
    retVal = false;
}
return retVal;
有没有办法做我想做的事


有更好的办法吗。如果最终用户需要,我正在尝试升级安装的数据库。我检查数据库中的一个值,该值告诉我上次在其上使用的应用程序版本。然后我想运行SQL添加所需字段,然后更新数据库中应用程序版本的值。

SQL CE没有类似于
IF
的过程语句。您必须将SQL分解为两个命令,
ExecuteScalar('SELECT Count(*)…')
,如果结果为>0,
ExecuteNonQuery('ALTER TABLE…')
。这太可惜了。谢谢@DourHighArch。如果您将其添加为“答案”而不是注释,我会将其标记为“答案”。过程SQL的开销很大,除非您需要,否则不要使用它。如果需要,SQLCE不是一个好的选择。我没有写答案,因为我不知道如何查询SQLCE模式,并且您的代码还有其他问题;e、 你不应该捕捉异常和返回布尔值。如果可以清理代码,请将其作为答案发布。SQL CE没有类似于
If
的过程语句。您必须将SQL分解为两个命令,
ExecuteScalar('SELECT Count(*)…')
,如果结果为>0,
ExecuteNonQuery('ALTER TABLE…')
。这太可惜了。谢谢@DourHighArch。如果您将其添加为“答案”而不是注释,我会将其标记为“答案”。过程SQL的开销很大,除非您需要,否则不要使用它。如果需要,SQLCE不是一个好的选择。我没有写答案,因为我不知道如何查询SQLCE模式,并且您的代码还有其他问题;e、 你不应该捕捉异常和返回布尔值。如果你能清理你的代码,把它作为一个答案发布。