簡體   English   中英

在C#2008中將數據從DataGridView保存到Sql Server 2008需要太多時間

[英]To save data from DataGridView to Sql Server 2008 in C# 2008 takes too much time

我有一個DataGridView,它具有303行和11列。 當我將所有這些數據保存到我的sql表中時,它需要30-40秒。 是否可以在1-2秒內保存此數據。 我的代碼是這樣的

public SqlConnection  conn;
SqlTransaction transaction;
string strconn = "data source=nabid;Persist Security Info=false;database=dbTest;user id=sa ;password=123;Connection Timeout = 10000";
conn = new SqlConnection(strconn);
conn.Open();
transaction = conn.BeginTransaction();
            try
            {
                if (DataGridView1.Rows.Count > 0)
                {
                    clsProd.DeleteRecord("[tbl1]", "");
                    foreach (DataGridViewRow r in DataGridView1.Rows)
                    {
                        if (r.Cells[0].Value != null)
                        {
                            Ticker = r.Cells[1].Value.ToString().Trim();

                            string values = "'" + tt.Trim() + "',";
                            values += "'" + r.Cells[1].Value.ToString().Trim() + "',"; // Ticker
                            values += (r.Cells[2].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[2].Value.ToString().Trim())) + ",";    // LTP                        
                            values += Convert.ToDouble("0") + ","; // Open
                            values += (r.Cells[3].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[3].Value.ToString().Trim())) + ","; // High
                            values += (r.Cells[4].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[4].Value.ToString().Trim())) + ","; // LOW
                            values += (r.Cells[5].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[5].Value.ToString().Trim())) + ","; // Close
                            values += (r.Cells[6].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[6].Value.ToString().Trim())) + ","; // YCP
                            if (r.Cells[7].Value.ToString().Trim() == "--" || r.Cells[7].Value.ToString().Trim() == "")
                                chg_Prc = "0";
                            else
                                chg_Prc = r.Cells[7].Value.ToString().Trim();
                            values += Convert.ToDouble(chg_Prc.Trim()) + ","; // Change
                            values += (r.Cells[8].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[8].Value.ToString().Trim())) + ","; // Trade No
                            values += (r.Cells[9].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[9].Value.ToString().Trim())) + ","; // Volume
                            values += Convert.ToDouble("0") + ",";
                            if (r.Cells[2].Value.ToString().Trim() == "0.0" || r.Cells[2].Value.ToString().Trim() == "0.00" || r.Cells[2].Value.ToString().Trim() == "0")
                                tradeStatus = "N";
                            else
                                tradeStatus = "Y";
                            values += "'" + tradeStatus.Trim() + "',0";

                            addRecord("[tbl1]", values);
                        }
                    }
                    closeConnection();

                this.Cursor = Cursors.Default;
            }
            catch (Exception exx)
            {
                this.Cursor = Cursors.Default;
        errorTransaction();
                return;
            }

protected void ExecuteSQL(string sSQL)
        {
            SqlCommand cmd = new SqlCommand(sSQL, conn, transaction);
            cmd.ExecuteNonQuery();            
        }
public void DeleteRecord(string tblName, string values)
        {
            string sSQL = "DELETE FROM " + tblName + " " + values;
            ExecuteSQL(sSQL);
        }
public void addRecord(string tblName, string values)
        {
            string sSQL = "INSERT INTO " + tblName + " VALUES(" + values + ")";
            ExecuteSQL(sSQL);
        }
public void closeConnection()
        {
            transaction.Commit();
            conn.Close();
        }
public void errorTransaction()
        {
            transaction.Rollback();
            conn.Close();
        }

而不是調用函數並給程序增加開銷,而只需對多個插入,更新和刪除執行一個sql查詢字符串即可。

例如。

     string sqlInsert="";

        foreach (DataGridViewRow r in DataGridView1.Rows)
         {
         if (r.Cells[0].Value != null)
                                {
                                    Ticker = r.Cells[1].Value.ToString().Trim();

                                    string values = "'" + tt.Trim() + "',";
                                    values += "'" + r.Cells[1].Value.ToString().Trim() + "',"; // Ticker
                                    values += (r.Cells[2].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[2].Value.ToString().Trim())) + ",";    // LTP                        
                                    values += Convert.ToDouble("0") + ","; // Open
                                    values += (r.Cells[3].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[3].Value.ToString().Trim())) + ","; // High
                                    values += (r.Cells[4].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[4].Value.ToString().Trim())) + ","; // LOW
                                    values += (r.Cells[5].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[5].Value.ToString().Trim())) + ","; // Close
                                    values += (r.Cells[6].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[6].Value.ToString().Trim())) + ","; // YCP
                                    if (r.Cells[7].Value.ToString().Trim() == "--" || r.Cells[7].Value.ToString().Trim() == "")
                                        chg_Prc = "0";
                                    else
                                        chg_Prc = r.Cells[7].Value.ToString().Trim();
                                    values += Convert.ToDouble(chg_Prc.Trim()) + ","; // Change
                                    values += (r.Cells[8].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[8].Value.ToString().Trim())) + ","; // Trade No
                                    values += (r.Cells[9].Value.ToString().Trim() == "" ? 0 : Convert.ToDouble(r.Cells[9].Value.ToString().Trim())) + ","; // Volume
                                    values += Convert.ToDouble("0") + ",";
                                    if (r.Cells[2].Value.ToString().Trim() == "0.0" || r.Cells[2].Value.ToString().Trim() == "0.00" || r.Cells[2].Value.ToString().Trim() == "0")
                                        tradeStatus = "N";
                                    else
                                        tradeStatus = "Y";
                                    values += "'" + tradeStatus.Trim() + "',0";

                                    sqlInsert=sqlInsert+"Insert into " + tblName + " VALUES(" + values + ")";
                                }
                            }
ExecuteSQL(sqlInsert);

嘗試使用這樣的代碼。

這將減少系統開銷。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM