【问题标题】:DataAdapter Update issue数据适配器更新问题
【发布时间】:2014-09-18 14:30:22
【问题描述】:

以下编码不会更新我的表格。但更新后行变量值为 1。 我无法理解这背后的原因。请帮忙。

SqlConnection connection1 = new SqlConnection(connectionString);
connection1.Open();

var wktbl = new DataTable();

var cmd = new SqlCommand("SELECT * FROM Test", connection1);
var da1 = new SqlDataAdapter(cmd);
var b = new SqlCommandBuilder(da1);
da1.Fill(wktbl);

wktbl.Rows[0][2] = "5";
da1.UpdateCommand = b.GetUpdateCommand(true);

int rows = da1.Update(wktbl);

【问题讨论】:

    标签: c# ado.net dataadapter


    【解决方案1】:

    我发现了问题。这是因为 connectionString 有 |DataDirectory|。 运行应用程序时,MDF 文件位置不同。

    【讨论】:

      【解决方案2】:

      检查this page。它显示了以下使用数据适配器进行更新的示例。

      以下示例演示如何通过显式设置 DataAdapter 的 UpdateCommand 并调用其 Update 方法来对修改的行执行更新。请注意,在 UPDATE 语句的 WHERE 子句中指定的参数设置为使用 SourceColumn 的 Original 值。这很重要,因为当前值可能已被修改并且可能与数据源中的值不匹配。原始值是用于从数据源填充 DataTable 的值。

      private static void AdapterUpdate(string connectionString)
      {
          using (SqlConnection connection =
                 new SqlConnection(connectionString))
      {
          SqlDataAdapter dataAdpater = new SqlDataAdapter(
            "SELECT CategoryID, CategoryName FROM Categories",
            connection);
      
          dataAdpater.UpdateCommand = new SqlCommand(
             "UPDATE Categories SET CategoryName = @CategoryName " +
             "WHERE CategoryID = @CategoryID", connection);
      
          dataAdpater.UpdateCommand.Parameters.Add(
             "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
      
          SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
            "@CategoryID", SqlDbType.Int);
          parameter.SourceColumn = "CategoryID";
          parameter.SourceVersion = DataRowVersion.Original;
      
          DataTable categoryTable = new DataTable();
          dataAdpater.Fill(categoryTable);
      
          DataRow categoryRow = categoryTable.Rows[0];
          categoryRow["CategoryName"] = "New Beverages";
      
          dataAdpater.Update(categoryTable);
      
          Console.WriteLine("Rows after update.");
          foreach (DataRow row in categoryTable.Rows)
          {
              {
                  Console.WriteLine("{0}: {1}", row[0], row[1]);
              }
          }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多