使用.NET帮助批量/批量插入Sybase

时间:2011-02-22 17:35:26

标签: c# database .net-3.5 sybase bulkinsert

我想将数千条记录插入Sybase数据库。有没有什么好的工具可以帮助我管理.NET的批量插入?

记录作为XML消息传入我的Web服务。在Web服务中,我需要将这些记录加载到Sybase数据库中并重新发送加载状态。

3 个答案:

答案 0 :(得分:1)

认为您可能需要使用BCP

数据文件中的bcp database_name.owner.table_name -n -U用户名-P密码

Sybase BCP link

但是,您可能需要先将记录写入文件,然后使用Process类对刚刚编写的文件执行BCP。

AFAIK没有Sybase等效于SqlBulkCopy

答案 1 :(得分:0)

如果您只需要插入数千条记录,那么请不要担心批量加载。普通旧批量插入在几秒钟内执行此插入。

使用BCP的.NET Web服务是一个过于复杂的解决方案。 如果您必须插入超过一百万条记录,请尝试使用BCP。

答案 2 :(得分:0)

我做了类似的事情,这有助于显着减少加载时间,

    public static void InsertModelValueInBulk(DataSet employeData, int clsaId, int batchSize)
    {
        string[] insertStatement = new string[batchSize];
        using (var connection = GetOdbcConnection())
        {
            connection.Open();
            var tran = connection.BeginTransaction();
            try
            {
                int j = 0;
                for (int i = 0; i < employeData.Tables[0].Rows.Count; i++)
                {
                    var row = employeData.Tables[0].Rows[i];
                    var insertItem = string.Format(@"select '{0}',{1}", row["name"], Convert.ToInt32(row["ID"]);
                    insertStatement[j] = insertItem;
                    if (j % (batchSize-1) == 0 && j > 0)
                    {
                        var finalQuery = @" INSERT INTO employee (id, name)
                                         " + String.Join(" union ", insertStatement);
                        using (var cmd = new OdbcCommand(finalQuery, connection, tran))
                        {
                            cmd.ExecuteNonQuery();
                        }
                        j = 0;
                        continue;
                    }
                    else
                    {
                        j = j + 1;
                    }
                }

                if (j > 0)
                {
                    var finalQuery = @"INSERT INTO employee (id, name)
                                     " + String.Join(" union ", insertStatement,0,j-1);
                    using (var cmd = new OdbcCommand(finalQuery, connection, tran))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                tran.Commit();
            }
            catch
            {
                tran.Rollback();
                throw;
            }
        }
    }