如何在SQL ce中运行批处理查询

本文关键字:运行 批处理 查询 ce SQL | 更新日期: 2023-09-27 18:17:09

例如:

  StringBuilder query = new StringBuilder();
                    foreach (KeyValuePair<string, string> key in list)
                    {
                        string name = key.Key;
                        string emails = key.Value;
                        query.AppendFormat("insert into contacts(name, emails) values('{0}', '{1}');", name, emails);
                    }
   string queries = query.ToString(); //how to run it?

这是可能的?

如何在SQL ce中运行批处理查询

您的最佳选择是在循环之前开始事务,执行每条语句而不是将其添加到stringbuilder中,并在循环(或每n条记录)之后提交。

同样,您应该使用一个参数化的命令,类似于:

SqlCeCommand oCommand = conn.CreateCommand();
oCommand.CommandText = "insert into contacts(name, emails) values(?, ?)";
// I can't remember if the param names need @ or not
oCommand.Parameters.Add("@name", SqlDbType.VarChar);
oCommand.Parameters.Add("@email", SqlDbType.VarChar);
SqlCeTransaction oTrans = conn.BeginTransaction();
try {
  foreach (KeyValuePair<string, string> key in list) {
     oCommand.Parameters[0].Value = key.Key;
     oCommand.Parameters[1].Value = key.Value;
     oCommand.ExecuteNonQuery();
  }
  oTrans.Commit();
} catch (Exception ex) {
  oTrans.Rollback();
}

或者,您可以使用codeplex中的SQL Compact Bulk Insert Library。我相信这使用了一个TableDirect sqlecommand之上的SqlCeResultSet,它应该绕过查询处理器,并尽可能快,你可以得到。

这是精简版V3.5中不支持的特性。不确定它是否在V4中改变了。

打开连接/事务和循环是你唯一的选择。

不好意思,这是坏消息!