[英]Insert, Update, Delete are not applied on SQL Server CE database file for Windows Mobile
[英]Bulk insert in SQL Server CE from text file or DataTable in Windows Mobile 6.1
我想在Windows Mobile 6.1的SQL Server CE中插入超过5个lac记录
我正在使用的代码每秒大约需要8行。 这简直难以忍受。
我的代码如下-我有大约5个lac记录的DataTable
:
SqlCeCommand cmd1;
for (int i = 0; i < table.Rows.Count; i++)
{
cmd1 = new SqlCeCommand("Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "')", con);
con.Open();
cmd1.ExecuteNonQuery();
con.Close();
}
请提出更快的替代方法(最好是批量插入)。
由于您没有使用SqlCommand安全地添加参数,因此您应该:
SqlCeCommand command = conn.CreateCommand();
command.CommandText = "INSERT INTO Master (MasterValue) VALUES (@masterValue)";
SqlCeParameter param = null;
param = new SqlCeParameter("@masterValue", SqlDbType.Text);
command.Parameters.Add(param);
command.Parameters["@masterValue"].Value = table.Rows[i].ItemArray[0].ToString();
您可以使用字符串连接并构建包含所有插入内容的长字符串(这不是一种很干净的方法,但是,如果您知道自己的数据并且不存在不安全地执行插入操作的问题,那么可以选择这样做)
string insert = string.Empty;
for(int i = 0; i < table.rows.Count; i++)
{
insert += "Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "');";
if(i % 1000 == 0 || i+1 == table.rows.Count)
{
using (SqlCommand cmd1 = new SqlCommand(insert, con))
{
con.Open();
cmd1.ExecuteNonQuery();
con.Close();
insert = string.Empty;
}
}
}
请注意,每个插入符的末尾都有一个分号,需要单独运行插入符。 将模数调整为一次要插入的数量。
将SqlCeResultSet.Insert
与SqlCeUpdatableRecord
一起使用。 该答案演示了该过程。
而不是为每个条目打开/关闭数据库,而是在sqlCommand之前和之后打开:
改变那个
SqlCeCommand cmd1;
for (int i = 0; i < table.Rows.Count; i++)
{
cmd1 = new SqlCeCommand("Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "')", con);
con.Open();
cmd1.ExecuteNonQuery();
con.Close();
}
至
SqlCeCommand cmd1 = new SqlCeCommand();
con.Open();
cmd1.Connection = con;
for (int i = 0; i < table.Rows.Count; i++)
{
cmd1.CommandText = "Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "')";
cmd1.ExecuteNonQuery();
}
con.Close();
可能会有更快的技术,例如使用参数化查询或封装所有插入并最终提交的事务。
con.Open();
SqlCeTransaction tx = conn.BeginTransaction();
SqlCeCommand cmd1 = con.CreateCommand();
cmd1.Transaction = tx;
for (int i = 0; i < table.Rows.Count; i++)
{
cmd1.CommandText = "Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "')";
cmd1.ExecuteNonQuery();
}
tx.Commit();
con.Close();
(未经测试的代码根据: http : //msdn.microsoft.com/zh-cn/library/system.data.sqlserverce.sqlcecommand.transaction%28v=vs.100%29.aspx )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.