C# 我怎样才能把桌子做得更快?
我从我的SQL server中获取数据并将其放入一个表中,但是这个过程需要很长时间,因为有数千行数据。如何使此过程更快 我目前正在使用C# 我怎样才能把桌子做得更快?,c#,sql-server,C#,Sql Server,我从我的SQL server中获取数据并将其放入一个表中,但是这个过程需要很长时间,因为有数千行数据。如何使此过程更快 我目前正在使用foreach循环向表中添加新行,即使处理20行数据,也需要2到3秒的时间。以下是我的代码,我如何改进它?(代码有点长,很抱歉,但我想展示整个过程,以便讲述整个故事) /* *返回bestbuy导出表的类 */ 类BestbuyExportTable { //主表的字段 私有数据表主表; //数据库连接字段 SqlConnection连接; /*初始化字段的构造函
foreach
循环向表中添加新行,即使处理20行数据,也需要2到3秒的时间。以下是我的代码,我如何改进它?(代码有点长,很抱歉,但我想展示整个过程,以便讲述整个故事)
/*
*返回bestbuy导出表的类
*/
类BestbuyExportTable
{
//主表的字段
私有数据表主表;
//数据库连接字段
SqlConnection连接;
/*初始化字段的构造函数*/
公共BestbuyExportTable()
{
mainTable=新数据表();
连接=新的SqlConnection(Properties.Settings.Default.ConnectionString);
}
/*真品->返回桌子*/
公共数据表getTable()
{
//重置表格以防万一
mainTable.Reset();
//向表中添加列
addColumn(主表,“SKU”);//1
addColumn(主表,“部门”);//2
addColumn(主表,“简短描述”);//3
addColumn(主表,“长描述”);//4
addColumn(主表,“UPC(主)”;//4
addColumn(主表,“UPC(附加)”;//5
addColumn(主表,“品牌名称”);//6
addColumn(主表,“型号”);//7
addColumn(主表,“制造商”);//8
addColumn(主表,“供应商”);//9
addColumn(主表,“供应商零件号”);//10
addColumn(主表,“单位成本”);//11
addColumn(主表,“零售价格”);//12
addColumn(主表,“尺寸(厘米)宽度(带方框)”;//13
addColumn(主表,“尺寸(厘米)高度(带方框)”;//14
addColumn(主表,“尺寸(CM)长度/深度(带方框)”;//15
addColumn(主表,“尺寸(KG)重量(带方框)”;//16
addColumn(主表,“尺寸(厘米)宽度(无框)”;//17
addColumn(主表,“尺寸(厘米)高度(无框)”;//18
addColumn(主表,“尺寸(CM)长度/深度(无框)”;//19
addColumn(主表,“尺寸(KG)重量(无框)”;//20
addColumn(主表,“法语兼容”);//21
addColumn(主表,“能源之星”);//22
addColumn(主表,“翻新”);//23
addColumn(主表,“软件平台”);//24
addColumn(主表,“街道日期”);//25
addColumn(主表,“需要序列号”);//26
addColumn(mainTable,“序列化格式”);//27
addColumn(主表,“支持制造商保修”);//28
addColumn(主表,“MNF保修服务”);//29
addColumn(主表,“MNF保修范围外的服务”);//30
addColumn(主表,“供应商联系人”);//31
addColumn(主表,“始终为RTV”);//32
addColumn(主表,“退回供应商缺陷日期”);//33
addColumn(主表,“返回供应商开箱天数”);//34
addColumn(主表,“产品保修天数”);//35
addColumn(主表,“产品保修范围”);//36
addColumn(主表,“延长零件保修”);//37
addColumn(mainTable,“返回限制”);//38
addColumn(主表,“禁运日期”);//39
addColumn(主表,“到期日期/批号”);//40
addColumn(主表,“保质期”);//41
addColumn(主表,“数据标志”);//42
addColumn(主表,“小于卡车装载”);//43
addColumn(主表,“SKU百思买”;//44
//用于将数据插入表的本地字段
数据行;
AltText alt=new AltText();//这只是一个获取产品alt文本的类
字符串[]skuList=getSKU();
//向每行添加数据
foreach(sku列表中的字符串sku)
{
字符串[]列表=获取数据(sku);
row=mainTable.NewRow();
行[0]=sku;//sku
第[1]行=“104”;//部门
行[2]=alt.getAlt(sku);//简短说明
行[3]=列表[0];//详细说明
行[4]=列表[9];//upc代码主
行[5]=列表[10];//upc代码附加
第[6]行=“Ashlin®”;//b
/*
* A class that return bestbuy export table
*/
class BestbuyExportTable
{
// field for the main table
private DataTable mainTable;
// field for database connection
SqlConnection connection;
/* constructor that initialize fields */
public BestbuyExportTable()
{
mainTable = new DataTable();
connection = new SqlConnection(Properties.Settings.Default.ConnectionString);
}
/* the real thing -> return the table !!! */
public DataTable getTable()
{
// reset table just in case
mainTable.Reset();
// add column to table
addColumn(mainTable, "SKU"); // 1
addColumn(mainTable, "DEPARTMENT"); // 2
addColumn(mainTable, "SHORT DESCRIPTION"); // 3
addColumn(mainTable, "LONG DESCRIPTION"); // 4
addColumn(mainTable, "UPC (PRIMARY)"); // 4
addColumn(mainTable, "UPC (ADDITIONAL)"); // 5
addColumn(mainTable, "BRAND NAME"); // 6
addColumn(mainTable, "MODEL NO"); // 7
addColumn(mainTable, "MANUFACTURER"); // 8
addColumn(mainTable, "SUPPLIER"); // 9
addColumn(mainTable, "VENDOR PART NO"); // 10
addColumn(mainTable, "UNIT COST"); // 11
addColumn(mainTable, "RETAIL PRICE"); // 12
addColumn(mainTable, "DIMENSION (CM) WIDTH (WITH BOX)"); // 13
addColumn(mainTable, "DIMENSION (CM) HEIGHT (WITH BOX)"); // 14
addColumn(mainTable, "DIMENSION (CM) LENGTH/DEPTH (WITH BOX)"); // 15
addColumn(mainTable, "DIMENSION (KG) WEIGHT (WITH BOX)"); // 16
addColumn(mainTable, "DIMENSION (CM) WIDTH (NO BOX)"); // 17
addColumn(mainTable, "DIMENSION (CM) HEIGHT (NO BOX)"); // 18
addColumn(mainTable, "DIMENSION (CM) LENGTH/DEPTH (NO BOX)"); // 19
addColumn(mainTable, "DIMENSION (KG) WEIGHT (NO BOX)"); // 20
addColumn(mainTable, "FRENCH COMPLIANT"); // 21
addColumn(mainTable, "ENERGY STAR"); // 22
addColumn(mainTable, "REFURBISHED"); // 23
addColumn(mainTable, "SOFTWARE PLATFORM"); // 24
addColumn(mainTable, "STREET DATE"); // 25
addColumn(mainTable, "SERIAL NO REQUIRED"); // 26
addColumn(mainTable, "SERIALIZED FORMAT"); // 27
addColumn(mainTable, "SUPPORT MANUFACTURER WARRANTY"); // 28
addColumn(mainTable, "SERVICE UNDER MNF WARRANTY"); // 29
addColumn(mainTable, "SERVICE OUTSIDE MNF WARRANTY"); // 30
addColumn(mainTable, "SUPPLIER CONTACT"); // 31
addColumn(mainTable, "ALWAYS RTV"); // 32
addColumn(mainTable, "RETURN TO VENDOR DEFECTIVE DATE"); // 33
addColumn(mainTable, "RETURN TO VENDOR OPEN BOX DAYS"); // 34
addColumn(mainTable, "PRODUCT WARRANTY DAYS"); // 35
addColumn(mainTable, "PRODUCT WARRANTY COVERAGE"); // 36
addColumn(mainTable, "EXTENDED PARTS WARRANTY"); // 37
addColumn(mainTable, "RETURN RESTRICTIONS"); // 38
addColumn(mainTable, "EMBARGO DATE"); // 39
addColumn(mainTable, "EXPIRATION DATE/LOT NUMBER"); // 40
addColumn(mainTable, "SHELF LIFE"); // 41
addColumn(mainTable, "DATA FLAG"); // 42
addColumn(mainTable, "LESS THAN TRUCKLOAD"); // 43
addColumn(mainTable, "SKU_BESTBUY_CA"); // 44
// local field for inserting data to table
DataRow row;
AltText alt = new AltText(); // this is just a class that get the alt text of a product
string[] skuList = getSKU();
// add data to each row
foreach (string sku in skuList)
{
string[] list = getData(sku);
row = mainTable.NewRow();
row[0] = sku; // sku
row[1] = "104"; // department
row[2] = alt.getAlt(sku); // short description
row[3] = list[0]; // long description
row[4] = list[9]; // upc code primary
row[5] = list[10]; // upc code additional
row[6] = "Ashlin®"; // brand name
row[7] = list[1]; // model no
row[8] = "Ashlin®"; // manufacturer
row[9] = "234326"; // supplier
row[10] = sku; // vendor
row[11] = (Math.Round((Convert.ToDouble(list[11]) * 0.5775), 2)).ToString(); // unit cost
row[12] = (Math.Ceiling((Convert.ToDouble(list[11]) * 1.06)) - 0.01).ToString(); // retail price
row[13] = list[2]; // dimension width (with box)
row[14] = list[3]; // dimension height (with box)
row[15] = list[4]; // dimension length (with box)
row[16] = (Convert.ToDouble(list[5]) / 1000).ToString(); // dimension weight (with box)
row[17] = list[2]; // dimension width (no box)
row[18] = list[3]; // dimension height (no box)
row[19] = list[6]; // dimension length (no box)
row[20] = list[7]; // dimension weight (no box)
row[21] = 'Y'; // french compliant
row[23] = 'N'; // refurbished
row[24] = 'N'; // software platform
row[26] = 'N'; // serial no required
row[28] = 'N'; // support manufacturer warranty
row[29] = 'Y'; // service under mnf warranty
row[30] = 'N'; // service outside mnf warranty
row[31] = 8884274546; // supplier contact
row[32] = 'N'; // always rtv
row[33] = 0; // return to vendor defective date
row[34] = 0; // return to vendor open box days
row[35] = 365; // peoduct warranty days
row[44] = list[8]; // sku bestbuy ca
mainTable.Rows.Add(row);
}
return mainTable;
}
/* method that add new column to table */
private void addColumn(DataTable table, string name)
{
// set up column
DataColumn column = new DataColumn();
column.ColumnName = name;
// add column to table
table.Columns.Add(column);
}
/* a method that get all the sku that is active and sell on bestbuy*/
private string[] getSKU()
{
// local field for storing data
List<string> skuList = new List<string>();
// connect to database and grab data
SqlCommand command = new SqlCommand("SELECT SKU_Ashlin FROM master_SKU_Attributes WHERE SKU_BESTBUY_CA is NOT NULL AND Active = \'TRUE\' ORDER BY SKU_Ashlin;", connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
skuList.Add(reader.GetString(0));
}
connection.Close();
return skuList.ToArray();
}
/* method that get the data from given sku */
private string[] getData(string sku)
{
// local field for storing data
List<string> list = new List<string>();
DataTable table = new DataTable();
// get the design code from sku
string design = sku.Substring(0, sku.IndexOf('-'));
// grab data from design
// [0] for long description, [1] for model no, [2] for diemsion width (with box), [3] for dimension height (with box), [4] for dimension legth (with box), [5] for dimension weight (with box), [6] for dimension length (no box), [7] for dimension weight(no box)
// and (no box) and (no box)
SqlDataAdapter adapter = new SqlDataAdapter("SELECT Extended_Description, Design_Service_Fashion_Name_BESTBUY_CA, Width_cm, Height_cm, Shippable_Depth_cm, Shippable_Weight_grams, Depth_cm, Weight_grams FROM master_Design_Attributes WHERE Design_Service_Code = \'" + design + "\';", connection);
connection.Open();
adapter.Fill(table);
for (int i = 0; i <= 7; i++)
{
list.Add(table.Rows[0][i].ToString());
}
table.Reset();
// [8] for SKU_BESTBUY_CA, [9] for upc code primary, [10] for upc code additional, [11] for unit cost and retail price
adapter = new SqlDataAdapter("SELECT SKU_BESTBUY_CA, UPC_Code_9, UPC_Code_10, Base_Price FROM master_SKU_Attributes WHERE SKU_Ashlin = \'" + sku + "\';", connection);
adapter.Fill(table);
for (int i = 0; i <= 3; i++)
{
list.Add(table.Rows[0][i].ToString());
}
connection.Close();
return list.ToArray();
}
}
}
using(var reader = command.ExecuteReader();)
{
while (reader.Read())
{
skuList.Add(reader.GetString(0));
}
}
connection.Dispose();
using(var adapter = new SqlDataAdapter("SELECT Extended_Description, Design_Service_Fashion_Name_BESTBUY_CA, Width_cm, Height_cm, Shippable_Depth_cm, Shippable_Weight_grams, Depth_cm, Weight_grams FROM master_Design_Attributes WHERE Design_Service_Code = \'" + design + "\';", connection))
{
connection.Open();
adapter.Fill(table);
for (int i = 0; i <= 7; i++)
{
list.Add(table.Rows[0][i].ToString());
}
table.Reset();
adapter = new SqlDataAdapter("SELECT SKU_BESTBUY_CA, UPC_Code_9, UPC_Code_10, Base_Price FROM master_SKU_Attributes WHERE SKU_Ashlin = \'" + sku + "\';", connection);
adapter.Fill(table);
for (int i = 0; i <= 3; i++)
{
list.Add(table.Rows[0][i].ToString());
}
}
connection.Dispose();