C# 使用C将列添加到SQLServerCE表#
我正在尝试使用C#代码向CE数据库中的表中添加一个新列 此SQL在SSMS中工作,以添加到标准SQL数据库表: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时,我得到了一个错误: 分析查询时
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、 你不应该捕捉异常和返回布尔值。如果你能清理你的代码,把它作为一个答案发布。