sqlbulkcopy using sql CE

前端 未结 4 2070
天命终不由人
天命终不由人 2020-11-30 07:12

Is it possible to use SqlBulkcopy with Sql Compact Edition e.g. (*.sdf) files?

I know it works with SQL Server 200 Up, but wanted to check CE compatibility.

4条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 07:21

    BULKCOPY is not supported in SQL CE. Here is the fastest way if you have a huge number of rows in your table; insert is too slow!

    using (SqlCeConnection cn = new SqlCeConnection(yourConnectionString))
    {
        if (cn.State == ConnectionState.Closed)
            cn.Open();
    
        using (SqlCeCommand cmd = new SqlCeCommand())
        {
            cmd.Connection = cn;
            cmd.CommandText = "YourTableName";
            cmd.CommandType = CommandType.TableDirect;
    
            using (SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable))
            {
                SqlCeUpdatableRecord record = rs.CreateRecord();
    
                using (var sr = new System.IO.StreamReader(yourTextFilePath))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        int index = 0;
                        string[] values = line.Split('\t');
    
                        //write these lines as many times as the number of columns in the table...
                        record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
                        record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
                        record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
    
                        rs.Insert(record);
                    }
                }
            }
        }
    }
    

    Benchmark: table with 34370 rows

    • with inserts: 38 rows written per second

    • this way: 260 rows written per second

提交回复
热议问题