C#批量插入Sybase數據庫,Anywhere 8

數據庫版本是Adaptive Server Anywhere 8sql

一、添加引用,程序集 iAnywhere.Data.AsaClient。這個和SQLServer的System.Data.SqlClient相似,通常方法和用法都差很少。數據庫

二、對於批量插入SqlClient提供了BulkCopy方法,很方便。惋惜AsaClient裏面沒有。但和SqlClient同樣的是,能夠使用adapter.Update(datatable)方法進行批量插入。測試

三、注意點:在構建帶參數的sql語句時,Asa的參數前面是加「:」,而SqlServer是加「@」。其餘的寫法都是一毛同樣。ui

 

示例:spa

一、數據庫建表sql語句code

if exists(select id from sysobjects where type='U' and name='FloatValue')
drop table FloatValue
go 
create table FloatValue(
    vid integer not null,
    value_f float,
    time_v datetime
)

二、構建和表結構相同的Datatable,column名和數據庫表的列名相同。blog

1         public static DataTable GetTableSchema() 
2         {
3             DataTable dt = new DataTable();
4             dt.Columns.Add("vid");
5             dt.Columns.Add("value_f");
6             dt.Columns.Add("time_v");
7             return dt;
8         }

三、寫在helper類的方法cmd

 1         public static int BulkToASA(string sql,AsaParameter[]ps, DataTable dt) 
 2         {
 3             using (AsaConnection conn=new AsaConnection(connStr))
 4             {
 5                 using (AsaCommand cmd = new AsaCommand(sql, conn))
 6                 {
 7                     if (ps != null)
 8                     {
 9                         for (int i = 0; i < ps.Length; i++)
10                         {
11                             cmd.Parameters.Add(ps[i]);
12                         }
13                     }
14                     AsaDataAdapter adapter = new AsaDataAdapter();
15                     AsaCommandBuilder ab = new AsaCommandBuilder(adapter);
16                     adapter.InsertCommand = cmd;
17                     
18                     return adapter.Update(dt);
19                 }
20             }
21         }

四、調用方法string

1         public static int InsertDatatable(DataTable dt) 
2         {
3             string sql = @"insert into FloatValue (vid,value_f,time_v) values(:id,:value,:time)";
4             AsaParameter[] ps = { new AsaParameter("id", AsaDbType.Integer,8,"vid"), new AsaParameter("value",AsaDbType.Float,15,"value_f"), new AsaParameter("time", AsaDbType.DateTime,30,"time_v") };
5             return SqlHelperForASA.BulkToASA(sql, ps,dt);            
6         }

 

這個插入速度至少每秒2000條以上(我測試的一個datatable裏面就只有2000條,實際應該更快吧)。io

相關文章
相關標籤/搜索