【问题标题】:Updating table to Excel将表格更新到 Excel
【发布时间】:2014-06-06 14:28:22
【问题描述】:

我正在尝试“更新”放置在 dataGridView 上的单元格中的数据。我将数据从 Excel 文件导入 dataGridView。使用这种方法;

public static void updateTable1(string myNameRange, string mySET, string myWHERE)
{
    string sql = null;
    sql = "UPDATE " + myNameRange + " SET " + mySET + "' WHERE " + myWHERE + "'";
    //sql = "INSERT INTO" + myNameRange + " SET " + mySET + "'";
    myCommand.CommandText = sql;
    myCommand.ExecuteNonQuery(); 
}

如果我们有 NAME 和 AGE 列标题,如果我输入一个名称为 Jack 和 Mike 的表格,年龄分别为 10 岁和 20 岁,如果我将 Jacks 年龄从 10 岁更改为 30 岁,则此方法有效。代码说。列名称 = Jack 然后将列 AGE 设置为 30。这又很好用。问题是如果我想更改姓名和年龄怎么办。因此,将 Jack 更改为 Matt,并将 Mikes 的年龄更改为 40。或者在我的表中添加另一个姓名和年龄。这种方式行不通。有没有一种简单的方法来更新整个表并进行任何更改?

【问题讨论】:

  • 你需要一些额外的条件逻辑,比如AND,如果你的表中有多个 Jack,你怎么知道要更新哪个......你需要另一个 Key 来引用。你需要一种方法来跟踪新更新的记录..所以跟踪 ID 或主键或其他一些键索引也会有所帮助,所以也许你可以创建一个存储过程并使用一个可以处理 INSERT 和 UPDATE 声明一些变量的 SP,根据条件设置它们并根据需要创建out 参数

标签: c# excel datagridview


【解决方案1】:

假设您有 3 个文本框,用户在其中填写姓名和年龄(以及旧姓名):

创建一个要检查的方法:

  1. 多少文本框被填满
  2. 如果最后一个文本框中输入的名称存在于 DB 中

假设 Check 是这个方法:

public static void updateTable1(string myNameRange, string mySET, string myWHERE)
    {
        if (Check()==0)/// Suppose 0 means all textboxes filled and name2 exists in DB
       {      
        string sql = "UPDATE myTable SET  NAME=@name , AGE=@age  WHERE Name=@name2";

        myCommand.CommandText = sql;
        myCommand.Parameters.AddWithValue("@name", textBox1.text);
        myCommand.Parameters.AddWithValue("@age", textBox2.text);
        myCommand.Parameters.AddWithValue("@name2", textBox3.text);
        myCommand.ExecuteNonQuery();
        }
        else if  (Check()==1)/// Suppose 1 means only name filled and name2 exists in DB
        {
          string sql = "UPDATE myTable SET  NAME=@name  WHERE Name=@name2";      
        myCommand.CommandText = sql;
        myCommand.Parameters.AddWithValue("@name", textBox1.text);       
        myCommand.Parameters.AddWithValue("@name2", textBox3.text);
        myCommand.ExecuteNonQuery();
        }
        ....
        else /// (name2 not in DB)
        {
         sql = "INSERT INTO" + myNameRange + " SET " + mySET + "'";
          ///.......
        }
    }

【讨论】:

    【解决方案2】:
            Create stored procedure like the sample one below, here you only pass all the values that were changed, then the stored procedure will take care of the update. 
    
            public static void updateTable1(string? NameValue, int? AgeValue, int uniqueValue)
            {
                try 
                {           
                    SqlCommand myCommand = new SqlCommand();
                    myCommand.CommandType = CommandType.StoredProcedure;
                    myCommand.CommandText = "spUpdate_ProcName";
                    myCommand.Parameters.AddWithValue("@Name", NameValue);
                    myCommand.Parameters.AddWithValue("@Age", AgeValue);
                    myCommand.Parameters.AddWithValue("@UniqueColumn", uniqueValue);
                    myCommand.ExecuteNonQuery();
                }
                catch (Exception)
                {       
                    throw;
                }
    
    
            }
            //To be done in SQL
            CREATE PROCEDURE upProcName
            (
                @Name varchar(100) = NULL,
                @Age int = NULL,
                @UniqueColumn int -- unique column or primary key
            )
            AS
            BEGIN
                SET NOCOUNT ON;
    
                UPDATE yourTableName
                SET Name = COALESCE(@Name, Name),
                    Age = COALESCE(@Age, Age)
                WHERE UniqueColumn = @UniqueColumn
            END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      相关资源
      最近更新 更多