我想将数千条记录插入Sybase数据库。有没有什么好的工具可以帮助我管理.NET的批量插入?
记录作为XML消息传入我的Web服务。在Web服务中,我需要将这些记录加载到Sybase数据库中并重新发送加载状态。
答案 0 :(得分:1)
认为您可能需要使用BCP
数据文件中的bcp database_name.owner.table_name -n -U用户名-P密码
但是,您可能需要先将记录写入文件,然后使用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;
}
}
}