數據庫版本是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