SQLite语法错误,关键字'OR'附近有误。

3
我正在尝试使用以下查询向SQLite数据库插入或替换数据:

INSERT OR REPLACE INTO

INSERT OR REPLACE INTO VersionNumbers
(VersionNumberID,
ENVID,
EnvShortName,
VersionNumber,
BuildNumber,
SourceGetVersion,
DeploymentDate,
CreatedDateTime,
ModifiedDateTime,
Deleted,
LastGetFromServerDateTime)
Values
('da8e3589-4511-4300-a081-ff57998be949',
'd2303c80-ce8e-4a66-98ca-009b5073e967',
'Environment A',
'16.3.1610.2708', 
'BuildNumber_20161027.2', 
'C99633', 
'2016-10-31', 
'10/10/2016 12:35:41', 
'14/11/2016 10:55:15', 
'0',
'14/11/2016 15:21:05')

我已经使用DB Browser for SQLite测试过,并直接在数据库上执行了SQL语句,一切都很好,但是如果我通过C#传递相同的查询,就会出现错误“关键字'OR'附近的语法不正确。”

C#

dbConnection.ConnectionString = DataDbConnString;
dbConnection.Open();
foreach (DataRow dataRow in dataTableVersion.Rows)
{
    try
    {
        var QueryUpdateOrInsert = @"INSERT OR REPLACE INTO VersionNumbers
                                      (VersionNumberID,
                                      ENVID,
                                      EnvShortName,
                                      VersionNumber,
                                      BuildNumber,
                                      SourceGetVersion,
                                      DeploymentDate,
                                      CreatedDateTime,
                                      ModifiedDateTime,
                                      Deleted,
                                      LastGetFromServerDateTime) Values (" +
                                      "'" + dataRow["VersionNumberID"] + "'," +
                                      "'" + dataRow["ENVID"] + "'," +
                                      "'" + dataRow["ENVShortName"] + "'," +
                                      "'" + dataRow["CurrentVersionNumber"] + "', " +
                                      "'" + dataRow["CurrentBuildName"] + "', " +
                                      "'" + dataRow["CurrentLastAssociatedChangeset"] +
                                      "'" + dataRow["DeploymentDate"] + "', " +
                                      "'" + dataRow["CreatedDateTime"] + "', " +
                                      "'" + dataRow["ModifiedDateTime"] + "', " +
                                      "'" + dataRow["Deleted"] + "', " +
                                      " '" + currentDateTimeUtc + "')";
        var sqlcmd = new SqlCommand(QueryUpdateOrInsert, dbConnection);
        var sda = new SqlDataAdapter(sqlcmd);
        var sqlexe = sqlcmd.ExecuteNonQuery();
    }
    catch (Exception Exception)
    {
        MessageBox.Show(Exception.Message);
    }
}
dbConnection.Close();

我以前从未见过INSERT OR REPLACE。我会尝试只使用REPLACE,因为这个命令会在行不存在时插入该行。 - Pikoh
你尝试过仅使用REPLACE INTO而不是INSERT OR REPLACE INTO吗? - Ismael
@Pikoh,我刚刚尝试使用REPLACE,但现在出现了以下错误:“关键字'INTO'附近的语法不正确。” - Scott E
数据库是SQLite吗? - Pikoh
@Pikoh 是的,它是由SQLite创建的.db文件。 - Scott E
1个回答

2
问题在于您没有使用SQLite命令/数据适配器,而是使用了为SQL Server设计的适配器。您需要安装System.Data.SQLite .net Adapter并使用正确的Sqlite连接、命令和适配器:SQLiteConnectionSQLiteCommandSQLiteDataAdapter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接