Sql Server CE - 临时禁用特定列的自动增量

时间:2010-04-21 15:29:41

标签: c# sql-server-ce auto-increment

我有一个小问题,现在已经有一段时间了。

这就是:

是否可以临时禁用列ID上的Auto_Increment。

这样我就可以在表中添加一个新行,并在插入行时指定ID值。

然后最后再次启用Auto_Increment,让它像往常一样工作?

如果可能的话我该怎么做?

表结构非常简单

列名(属性)

ID (Primary Key, Auto Increment, int, not null)
Name (nvarchar(100), not null)

注意:

  • 表格名称为:People
  • 我们还要考虑该表已有数据且无法更改。
  • 数据库服务器是SQL Server CE。
  • 如果有任何帮助,SQL命令将在C#程序中执行。

我真的希望它有可能,它会变得非常方便。

由于

修改

SqlActions SqlActions = new SqlActions();

SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection());

try
{
    SqlCmd.ExecuteNonQuery();
}
catch (SqlCeException Error)
{
    Console.WriteLine(Error.ToString());
}

string query = "INSERT INTO People SET (ID, Nome) VALUES (@ID, @Nome)";

SqlCeCommand SqlInsert = new SqlCeCommand(query, SqlActions.Connection());

SqlInsert.Parameters.AddWithValue("@ID", 15);
SqlInsert.Parameters.AddWithValue("@Nome", "Maria");

try
{
    SqlInsert.ExecuteNonQuery();
}
catch (SqlCeException Error)
{
    Console.WriteLine(Error.ToString());
}

连接字符串正常,我已经尝试过了。

他报道:

  

解析查询时出错。   [令牌行号= 1,令牌行   抵消   = 20,令牌错误= SET]

解决方案 感谢OrbMan

        SqlActions SqlActions = new SqlActions();

        SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection());
        try
        {
            SqlCmd.ExecuteNonQuery();

            string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)";
            SqlCmd.CommandText = query;
            SqlCmd.Parameters.AddWithValue("@ID", 15);
            SqlCmd.Parameters.AddWithValue("@Nome", "Vania");
            SqlCmd.ExecuteNonQuery();
        }
        catch (SqlCeException Error)
        {
            Console.WriteLine(Error.ToString());
        }

1 个答案:

答案 0 :(得分:8)

我相信你可以使用SET IDENTITY_INSERT。我不确定这是否适用于所有版本。

更新2:

试试这个版本:

SqlActions SqlActions = new SqlActions();
SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection());
try
{
    SqlCmd.ExecuteNonQuery();
    string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)";
    SqlCmd.CommandText = query;
    SqlCmd.Parameters.AddWithValue("@ID", 15);
    SqlCmd.Parameters.AddWithValue("@Nome", "Maria");
    SqlCmd.ExecuteNonQuery();
}
catch (SqlCeException Error)
{
    Console.WriteLine(Error.ToString());
}