简体   繁体   English

C#使用Oledb datagridview更新Excel

[英]C# Update Excel Using Oledb datagridview

namespace PROCESS_FOLDER_V2
{
    public partial class OrganiZe : Form
    {
        public OrganiZe()
        {
            InitializeComponent();

        }


    int TotalCnt = 0;

    private void Insert(int Col1, string Col2, string Col3, string Col4, int Col5)
    {

        // MessageBox.Show("SNo: " + Col1 + "\n"+"\n" + "Material Code " + Col2 + "\n"+"\n" + "Item Text :" + Col3 +"\n"+"\n"+ "PO Text :" + Col4 + "\n"+"\n"+"PR Number :" + Col5, "OrganiZe");
        while (Col4.Contains("'"))
        {
            Col4 = Col4.Replace("'", "`");
        };
        while (Col3.Contains("'"))
        {
            Col3 = Col3.Replace("'", "`");
        };
        //File.WriteAllText("Char.txt", Col4);
        //MessageBox.Show("SNo: " + Col1 + "\n" + "\n" + "Material Code " + Col2 + "\n" + "\n" + "Item Text :" + Col3 + "\n" + "\n" + "PO Text :" + Col4 + "\n" + "\n" + "PR Number :" + Col5, "OrganiZe");

        System.Data.OleDb.OleDbConnection MyConnection;
        System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
        string sql = null;
        MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0");
        MyConnection.Open();

        myCommand.Connection = MyConnection;
        sql = "INSERT INTO [PR$]"
            + "([SNo],[MATERIAL CODE],[ITEM TEXT],[PO TEXT],[PRNo])"
            + "VALUES('" + Col1 + "','" + Col2 + "','" + Col3 + "','" + Col4 + "','" + Col5 + "')";

        myCommand.CommandText = sql;
        myCommand.ExecuteNonQuery();
        DataSet ds = new DataSet();
        OleDbDataAdapter da;
        da = new OleDbDataAdapter(myCommand);
        DataTable dt = new DataTable();
        da.Update(dt);
        // da.Fill(ds);
        //dgPR.DataSource = ds.Tables[0];
        MyConnection.Close();

    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //  READ TEXT FILE

    string PRtext = "";
    string PRtextEdited = "";

    //***************************************************************
    private void ReadPDF(string getName)
    {
        string strText = null;
        PdfReader reader = new PdfReader(getName);

        for (int page = 1; page <= reader.NumberOfPages; page++)
        {
            ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
            string s = PdfTextExtractor.GetTextFromPage(reader, page, its);
            s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
            strText = strText + s;
            // txtFilee.Text = strText;

        }

        PRtext = strText;
        reader.Close();
        //StreamWriter sw = new StreamWriter("PDFtoTEXT.txt");
        File.WriteAllText("PDFtoText.txt", PRtext);
        //sw.Close();

        string lRead;
        lRead = strText;
        txtFilee.Text = strText;

        int IndPrvPage = 0;
        int len = 113;
        //string Page = "";
        if (lRead.Contains("'")) { lRead = lRead.Replace("'", "`"); };
        int IndPage = lRead.IndexOf("Page", IndPrvPage);

        while (lRead.Contains("Page") == true)
        {
            if (lRead.Length < (lRead.IndexOf("Page", 0) + len)) { break; }

            IndPage = lRead.IndexOf("Page", IndPrvPage);

            //Page = lRead.Substring(IndPage, len);
            //string temp;
            if (IndPage > 0) { lRead = lRead.Remove(IndPage, len); };
            if (IndPage < 0) { break; };

            IndPrvPage = IndPage;
            //MessageBox.Show(Page);


        }
        //MessageBox.Show(lRead);
        File.WriteAllText("PDFtoTEXT.txt", lRead);
        PRtextEdited = lRead;
        //MessageBox.Show(PRtextEdited);
    }
    //*******************************************************







    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // FINDING AND ORGANIZING



    private void btnOrganize_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.ShowDialog();
        string NameFolder = fbd.SelectedPath;


        foreach (string getName in Directory.GetFiles(@NameFolder, "*.pdf"))
        {
            ReadPDF(getName);

            int IndInitial = 0;
            int index = 0;
            string tmp = "";

            //*****************

            tmp = PRtextEdited;

            //***********************
            ///find PR No.
            int PRNo = 0;
            int IndPRNo = 0;
            string PRNum;
            IndPRNo = tmp.IndexOf("Purchase Requisition") + 23;
            PRNum = tmp.Substring(IndPRNo, 9);
            // MessageBox.Show("Purchase Requisition No: " + PRNum, "OrganiZe");

            int Finish = 0;
            // string Zeros="000";
            string Zeros3 = "000";
            string Zeros2 = "00";
            string Zeros1 = "0";
            int N = 10;
            string ItemNo = "00000";
            string NxtItemNo = "00000";
            int Cnt = 0;
            string z = "MATERIAL DESCRIPTION & ITEM TEXT";
            int IndZ = 0;
            if ((tmp.IndexOf(z) < 0)) { z = "N & ITEM TEXT"; }
            IndZ = tmp.IndexOf(z, IndInitial) + 25;             // set starting index as MATERIAL DESCRIPTION & ITEM TEXT


            //MessageBox.Show(tmp);
            do
            {
                string txtFindPO = "Material  PO Text";
                string txtFindITEM = "Item Text";
                string txtLast = "Prepared By";
                string matCode = "";
                int indMat = 0;
                int indPO = 0, indItem = 0, indNext = 0;


                if (N < 100) { ItemNo = Zeros3 + N.ToString(); }
                if (N >= 100 && N < 1000) { ItemNo = Zeros2 + N.ToString(); }
                if (N >= 1000 && N < 10000) { ItemNo = Zeros1 + N.ToString(); }

                //find first item
                string Item = ItemNo + " " + "M";

                while (tmp.IndexOf(Item, IndZ) == -1)
                {
                    N = N + 10;

                    if (N < 100) { ItemNo = Zeros3 + N.ToString(); }
                    if (N >= 100 && N < 1000) { ItemNo = Zeros2 + N.ToString(); }
                    if (N >= 1000 && N < 10000) { ItemNo = Zeros1 + N.ToString(); }
                    Item = ItemNo + " " + "M";


                }

                if (N < 90) { NxtItemNo = Zeros3 + (N + 10).ToString(); }
                if (N >= 90 && N < 990) { NxtItemNo = Zeros2 + (N + 10).ToString(); }
                if (N >= 990 && N < 9990) { NxtItemNo = Zeros1 + (N + 10).ToString(); }


                index = tmp.IndexOf(Item, IndZ);

                indMat = index;

                indPO = tmp.IndexOf(txtFindPO, index);
                if (indPO >= 0) { indPO = indPO + 43; };


                indItem = tmp.IndexOf(txtFindITEM, index);
                if (indItem >= 0) { indItem = indItem + 9; };
                //find next item
                string NxtItem = NxtItemNo + " " + "M";


                while (tmp.IndexOf(NxtItem, IndZ) == -1)
                {
                    N = N + 10;

                    if (N < 90) { NxtItemNo = Zeros3 + (N + 10).ToString(); }
                    if (N >= 90 && N < 990) { NxtItemNo = Zeros2 + (N + 10).ToString(); }
                    if (N >= 990 && N < 9990) { NxtItemNo = Zeros1 + (N + 10).ToString(); }

                    NxtItem = NxtItemNo + " " + "M";

                    indNext = tmp.IndexOf(NxtItem, index);
                    if (N >= 990)
                    {
                        int IndLast = 0;
                        IndLast = tmp.IndexOf("Prepared By", 0);
                        IndLast = tmp.IndexOf(txtLast, index);
                        indNext = IndLast;
                        Finish++;
                        break;
                    };


                }

                if (Finish < 1)
                {
                    if (N < 90) { NxtItemNo = Zeros3 + (N + 10).ToString(); }
                    if (N >= 90 && N < 990) { NxtItemNo = Zeros2 + (N + 10).ToString(); }
                    if (N >= 990 && N < 9990) { NxtItemNo = Zeros1 + (N + 10).ToString(); }

                    NxtItem = NxtItemNo + " " + "M";
                    indNext = tmp.IndexOf(NxtItem, index);

                }


                //**********************

                int lenITEM = 0;
                int lenPO = 0;
                string POtxt = "";
                string ITEMtxt = "";


                if (indPO > 0 && indItem > 0) { lenPO = (indItem - indPO) - 9; };
                if (indPO > 0 && indItem < 0) { lenPO = indNext - indPO - 9; };

                if (indItem > 0 && indNext > 0) { lenITEM = (indNext - indItem); }


                if (lenPO > 255) { lenPO = 255; }
                if (lenPO < 0) { lenPO = 0; }

                matCode = tmp.Substring(indMat + 6, 11);                  //material code


                if (indPO > 0) { POtxt = tmp.Substring(indPO, lenPO); };                    //MessageBox.Show(POtxt);

                if (lenITEM > 255) { lenITEM = 255; }
                if (lenITEM < 0) { lenITEM = 0; }

                if (indItem > 0) { ITEMtxt = tmp.Substring(indItem, lenITEM); };              //MessageBox.Show(ITEMtxt);


                Cnt = Cnt + 1;

                PRNo = Convert.ToInt32(PRNum);

                Insert(Cnt, matCode, ITEMtxt, POtxt, PRNo);   // INSERT INTO TABLE


                if (Finish == 1) break;

                N = N + 10;


            } while (N <= 990);
            //sr.Close();




            TotalCnt++;



            //  MessageBox.Show("All Organized", "OrganiZe");
            // MessageBox.Show("Total Items Nos: " + Cnt.ToString(), "OrganiZe");

        }

        MessageBox.Show("All completed.  " + "\n" + "\n" + "No of PR processed: " + TotalCnt.ToString(), "OrganiZe");
    }
















    private void btnShow_Click(object sender, EventArgs e)
    {
        string connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";

        string sql = "SELECT * FROM [PR$]";
        OleDbConnection connection = new OleDbConnection(connetionString);
        connection.ConnectionString = connetionString;
        adap = new OleDbDataAdapter(sql, connection);
        DataSet ds = new DataSet();
        connection.Open();
        adap.Fill(ds);
        dgPR.DataSource = ds.Tables[0];
        connection.Close();
    }











    private void txtFilter_TextChanged(object sender, EventArgs e)
    {
        conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";
        conn.Open();
        OleDbCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.Text;
        //cmd.CommandText = "SELECT * FROM [PR$] WHERE [MATERIAL CODE] LIKE ('" + txtFilter.Text + "%')";

        /*  if (cbFilter.SelectedItem.ToString() == "ITEM TEXT")
          {
              cmd.CommandText = "SELECT * FROM [PR$] WHERE [ITEM TEXT] LIKE ('%" + txtFilter.Text + "%')";
          }
          if (cbFilter.SelectedItem.ToString() == "PO TEXT")
          {
              cmd.CommandText = "SELECT * FROM [PR$] WHERE [PO TEXT] LIKE ('%" + txtFilter.Text + "%')";
          }
          if (cbFilter.SelectedItem.ToString() == "MATERIAL CODE")
          {
              cmd.CommandText = "SELECT * FROM [PR$] WHERE [MATERIAL CODE] LIKE ('%" + txtFilter.Text + "%')";
          }
          if (cbFilter.SelectedItem.ToString() == "PRNo")
          {
              cmd.CommandText = "SELECT * FROM [PR$] WHERE [PRNo] LIKE ('%" + txtFilter.Text + "%')";
          }

         */

        cmd.CommandText = "SELECT * FROM [PR$] WHERE [ITEM TEXT] LIKE ('%" + txtFilter.Text + "%')";
        cmd.ExecuteNonQuery();
        //OleDbDataAdapter adap = new OleDbDataAdapter("SELECT * FROM [PR$] LIKE '"+txtFilter.Text+"%'", conn);
        DataTable dt = new DataTable();
        adap = new OleDbDataAdapter(cmd);
        adap.Fill(dt);
        dgPR.DataSource = dt;
        //MessageBox.Show(dt.Rows[0][0].ToString());
    }

    //OleDbDataAdapter adap = new OleDbDataAdapter();
    // DataSet ds = new DataSet(@"PRTEXT.XLS");
    // string sql;

    //DataTable dt = new DataTable();

    // OleDbConnection conn = new OleDbConnection();
    // private string contents;
    // OleDbCommandBuilder builder; 

















    // }



    private void btnUpdate_Click(object sender, EventArgs e)
    {

        conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";
        conn.Open();



        string xlsSheet = "PR$";
        string name = ds.Tables[0].Rows[0][0].ToString();
        DataTable dt = (DataTable)dgPR.DataSource;

        string changeColumns = "";
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            changeColumns += Table.ColumnName[i] + "=@" + Table.ColumnName[i];
            if (Table.ColumnName.Count - 1 != i)
                changeColumns += ",";
        }

        adap.UpdateCommand = new OleDbCommand("UPDATE [" + xlsSheet + "]  SET " + changeColumns +
                                                            " WHERE " + Table.ColumnName[PrimaryColumnIndex] + " = @" + Table.ColumnName[PrimaryColumnIndex], conn);
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            adap.UpdateCommand.Parameters.Add("@" + Table.ColumnName[i], OleDbType.Char, 255).SourceColumn = Table.ColumnName[i];
        }
        foreach (int row in ListOfValues.Keys)
        {
            Table tbl = ListOfValues[row];
            ds.Tables[0].Rows[row][Table.ColumnName[PrimaryColumnIndex]] = ds.Tables[0].Rows[row][PrimaryColumnIndex];
            for (int i = 0; i < tbl.Value.Count; i++)
            {
                ds.Tables[0].Rows[row][Table.ColumnName[tbl.col[i]]] = tbl.Value[i];
            }
            //adap.UpdateCommand.ExecuteNonQuery();
            adap.Update(ds.Tables[0]);
        }
        conn.Close();
        MessageBox.Show("Updated");
    }


    bool isFormLoad = false;
    int PrimaryColumnIndex = 4;
    OleDbDataAdapter adap;
    DataSet ds;
    OleDbConnection conn;
    OleDbCommandBuilder builder;


    Dictionary<int, Table> ListOfValues = new Dictionary<int, Table>();

    public class Table
    {
        public List<string> Value { get; set; }
        public List<int> col { get; set; }
        public static List<string> ColumnName;
    }


    private void OrganiZe_Load_1(object sender, EventArgs e)
    {

        conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";
        conn.Open();
        adap = new OleDbDataAdapter("SELECT * FROM [PR$]", conn);
        ds = new DataSet();
        adap.Fill(ds, "PR");
        Table.ColumnName = new List<string>();
        foreach (DataColumn str in ds.Tables[0].Columns)
        {
            Table.ColumnName.Add(str.ColumnName);
        }
        dgPR.DataSource = ds.Tables[0];
        conn.Close();
        dgPR.Columns[PrimaryColumnIndex].ReadOnly = true;
        dgPR.RowValidated += new DataGridViewCellEventHandler(dgPR_RowValidated);
        isFormLoad = true;

    }


    private void dgPR_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        if (isFormLoad)
        {
            Table tbl = new Table();
            DataGridView dgv = (DataGridView)sender;
            tbl.Value = new List<string>();
            tbl.col = new List<int>();
            for (int i = 1; i < dgv.ColumnCount; i++)
            {
                tbl.Value.Add(dgv.Rows[e.RowIndex].Cells[i].Value.ToString());
                tbl.col.Add(i);
            }

            if (ListOfValues.Keys.Contains(e.RowIndex))
            {
                ListOfValues[e.RowIndex] = tbl;
            }
            else
                ListOfValues.Add(e.RowIndex, tbl);
        }
    }







}

} }

Code fucntion insert works well in excel. Code fucntion insert在excel中运行良好。 But code Update is not working.also I tried to run step by step..it executes all but stops at adap.update(ds.tables[0]) saying Syntax error in UPDATE statement. 但是代码更新不起作用。所以我试着一步一步地运行..在adap.update(ds.tables [0])执行除了停止在UPDATE语句中的语法错误。

exception: System.Data.OleDb.OleDbException was unhandled
HResult=-2147217900
Message=Syntax error in UPDATE statement.
Source=Microsoft Office Access Database Engine
ErrorCode=-2147217900

Suppose You have following Data in your workSheet PR 假设您在workSheet PR有以下数据


FirstName LastName     Age
johny     Depp         55
Statham   John         45
Diana     bantley      35

then you have to go through this code in your Button Click for Update 然后你必须在Button Click for Update中查看这段代码

 conn= new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";
    conn.Open();
    string xlsSheet = "PR$";
    adap.UpdateCommand = new OleDbCommand("UPDATE [" + xlsSheet + "] SET FirstName = ?, LastName = ?, Age = ?" +

                                                    " WHERE FirstName = "+ ds.Tables[0].Rows[0][0], conn);

    adap.UpdateCommand.Parameters.Add("@FirstName", OleDbType.Char, 255).SourceColumn = "FirstName";

        adap.UpdateCommand.Parameters.Add("@LastName", OleDbType.Char, 255).SourceColumn = "LastName";

        adap.UpdateCommand.Parameters.Add("@Age", OleDbType.Char, 255).SourceColumn = "Age";

        //// Updates the first row

        ds.Tables[0].Rows[0]["FirstName"] = "john";

        ds.Tables[0].Rows[0]["LastName"] = "Statham";

        ds.Tables[0].Rows[0]["Age"] = "55";


        adap.Update(ds.Tables[0]);
        conn.Close();
    MessageBox.Show("Updated");

where we give whole Query of update and in where condition we pass value of first index (ie (Zero index) value) , this update value Succesfully by changing our data DataTable Zero Index row. 我们给出整个查询更新和在哪里条件我们传递第一个索引的值(即(零索引)值),这个更新值成功地通过改变我们的数据DataTable零索引行。

Here is a full work of your given conditions, kindly check from your end. 这是您的特定条件的全部工作,请从您的结束检查。

private void btnUpdate_Click(object sender, EventArgs e)
    {
        conn.Open();
        string xlsSheet = "PR$";
        string name = ds.Tables[0].Rows[0][0].ToString();
        DataTable dt = (DataTable)dgPR.DataSource;

        string changeColumns = "";
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            changeColumns += Table.ColumnName[i] + "=@" + Table.ColumnName[i];
            if (Table.ColumnName.Count - 1 != i)
                changeColumns += ",";
        }

        adap.UpdateCommand = new OleDbCommand("UPDATE [" + xlsSheet + "]  SET " + changeColumns +
                                                            " WHERE " + Table.ColumnName[PrimaryColumnIndex] + " = @" + Table.ColumnName[PrimaryColumnIndex], conn);
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            adap.UpdateCommand.Parameters.Add("@" + Table.ColumnName[i], OleDbType.Char, 255).SourceColumn = Table.ColumnName[i];
        }
        foreach (int row in ListOfValues.Keys)
        {
            Table tbl = ListOfValues[row];
            ds.Tables[0].Rows[row][Table.ColumnName[PrimaryColumnIndex]] = ds.Tables[0].Rows[row][PrimaryColumnIndex];
            for (int i = 0; i < tbl.Value.Count; i++)
            {
                ds.Tables[0].Rows[row][Table.ColumnName[tbl.col[i]]] = tbl.Value[i];
            }

            adap.Update(ds.Tables[0]);
        }
        conn.Close();
        MessageBox.Show("Updated");
    }


    bool isFormLoad = false;
    int PrimaryColumnIndex = 0;
    OleDbDataAdapter adap;
    DataSet ds;
    OleDbConnection conn;
    OleDbCommandBuilder builder;


    Dictionary<int, Table> ListOfValues = new Dictionary<int, Table>();

    public class Table
    {
        public List<string> Value { get; set; }
        public List<int> col { get; set; }
        public static List<string> ColumnName;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\PRTEXT.xls;Extended Properties=Excel 8.0";
        conn.Open();
        adap = new OleDbDataAdapter("SELECT * FROM [PR$]", conn);
        ds = new DataSet();
        adap.Fill(ds, "PR");
        Table.ColumnName = new List<string>();
        foreach (DataColumn str in ds.Tables[0].Columns)
        {
            Table.ColumnName.Add(str.ColumnName);
        }
        dgPR.DataSource = ds.Tables[0];
        conn.Close();
        dgPR.Columns[PrimaryColumnIndex].ReadOnly = true;
        dgPR.RowValidated += new DataGridViewCellEventHandler(dgPR_RowValidated);
        isFormLoad = true;

    }


    private void dgPR_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        if (isFormLoad)
        {
            Table tbl = new Table();
            DataGridView dgv = (DataGridView)sender;
            tbl.Value = new List<string>();
            tbl.col = new List<int>();
            for (int i = 1; i < dgv.ColumnCount; i++)
            {
                tbl.Value.Add(dgv.Rows[e.RowIndex].Cells[i].Value.ToString());
                tbl.col.Add(i);
            }

            if (ListOfValues.Keys.Contains(e.RowIndex))
            {
                ListOfValues[e.RowIndex] = tbl;
            }
            else
                ListOfValues.Add(e.RowIndex, tbl);
        }
    }

kindly change PrimaryColumnIndex which you want to be not change in Excel File. 请更改您希望不在Excel文件中更改的PrimaryColumnIndex

Update: 更新:
Replace btnUpdate_Click through this. 用这个替换btnUpdate_Click

   private void btnUpdate_Click(object sender, EventArgs e)
    {
        conn.Open();
        string xlsSheet = "PR$";

        DataTable dt = (DataTable)dgPR.DataSource;

        string changeColumns = "";
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            changeColumns += "[" + Table.ColumnName[i] + "]"+ "=@" + Table.ColumnName[i];
            if (Table.ColumnName.Count - 1 != i)
                changeColumns += ",";
        }

        adap.UpdateCommand = new OleDbCommand("UPDATE [" + xlsSheet + "]  SET " + changeColumns +
                                                            " WHERE " + "["+ Table.ColumnName[PrimaryColumnIndex] +
                                                            "]"+ " = @" + Table.ColumnName[PrimaryColumnIndex], conn);
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            adap.UpdateCommand.Parameters.Add("@" + Table.ColumnName[i], OleDbType.Char, 255).SourceColumn = Table.ColumnName[i];
        }
        foreach (int row in ListOfValues.Keys)
        {
            Table tbl = ListOfValues[row];
            ds.Tables[0].Rows[row][Table.ColumnName[PrimaryColumnIndex]] = ds.Tables[0].Rows[row][PrimaryColumnIndex];
            for (int i = 0; i < tbl.Value.Count; i++)
            {
                ds.Tables[0].Rows[row][Table.ColumnName[tbl.col[i]]] = tbl.Value[i];
            }

            adap.Update(ds.Tables[0]);
        }
        conn.Close();
        MessageBox.Show("Updated");
    }

Update 2 : 更新2:
It is throwing error Because, Space is not supported in Query between Feilds Name. 抛出错误因为,在Feilds Name之间的Query中不支持Space
Again update btnUpdate_Click from following Code 再次从以下代码更新btnUpdate_Click

private void btnUpdate_Click(object sender, EventArgs e)
    {
        conn.Open();
        string xlsSheet = "PR$";

        DataTable dt = (DataTable)dgPR.DataSource;

        string changeColumns = "";
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            changeColumns += "[" + Table.ColumnName[i] + "]"+ "=@" + Table.ColumnName[i].Replace(' ','_');
            if (Table.ColumnName.Count - 1 != i)
                changeColumns += ",";
        }

        adap.UpdateCommand = new OleDbCommand("UPDATE [" + xlsSheet + "]  SET " + changeColumns +
                                                            " WHERE " + "["+ Table.ColumnName[PrimaryColumnIndex] +
                                                            "]"+ " = @" + Table.ColumnName[PrimaryColumnIndex].Replace(' ','_'), conn);
        for (int i = 0; i < Table.ColumnName.Count; i++)
        {
            adap.UpdateCommand.Parameters.Add("@" + Table.ColumnName[i].Replace(' ','_'), OleDbType.Char, 255).SourceColumn = Table.ColumnName[i];
        }
        foreach (int row in ListOfValues.Keys)
        {
            Table tbl = ListOfValues[row];
            ds.Tables[0].Rows[row][Table.ColumnName[PrimaryColumnIndex]] = ds.Tables[0].Rows[row][PrimaryColumnIndex];
            for (int i = 0; i < tbl.Value.Count; i++)
            {
                ds.Tables[0].Rows[row][Table.ColumnName[tbl.col[i]]] = tbl.Value[i];
            }

            adap.Update(ds.Tables[0]);
        }
        conn.Close();
        MessageBox.Show("Updated");
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM