使用adapter.Update

时间:2011-03-04 17:58:10

标签: c# .net sql dataset

我正在尝试更新表但我一直得到异常:更新无法找到TableMapping ...

我甚至尝试过最小化代码,但我仍然没有看到问题

Items.cs

public static void WriteDescription()
    {
        DataSet items = DAL.GetDataSet("SELECT * FROM Items");

        for (int i = 0; i < items.Tables[0].Rows.Count; i++)
                items.Tables[0].Rows[i]["Description"] = "Hello";

        DAL.UpdateDB("SELECT * FROM Items", items, "Items");
    }

Dal.cs

static public void UpdateDB(string strSql, DataSet ds, string tablename)
    {
        SqlConnection connection = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand(strSql, connection);
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        new SqlCommandBuilder(adapter);
        adapter.Update(ds, tablename);
    }

我甚至尝试删除for,可能是什么问题?

1 个答案:

答案 0 :(得分:0)

根据代码的设计方式,您应该使用SqlCommand对象在没有SqlDataAdapter的情况下执行更新。 SqlDataAdapter使用错误,根据代码的构造方式不必要。

DataAdapter的构造

  

SqlDataAdapter adapter = new   SqlDataAdapter的(CMD);

将命令(cmd)设置为DataAdapter的SELECT命令,而不是Update命令。 (DataAdapter具有插入,更新,删除和选择命令)

请改为尝试:

    static public void UpdateDB(string strSql, DataSet ds, string tablename)
    {
        SqlConnection connection = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand(strSql, connection);
        try
        {
           connection.Open();
           cmd.ExecuteNonQuery();
        }
        catch(Exception ex)
        {
           // error hanlding code here
        }
        finally
        {
          connection.Close();
        }
    }

或者,您可以保留大部分代码并正确设置更新命令 - 添加一行

  

adapter.UpdateCommand = strSql;

在调用“更新”之前。