Использование адаптера. Обновление - PullRequest
0 голосов
/ 04 марта 2011

Я пытаюсь обновить таблицу, но получаю исключение: при обновлении не удается найти 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 голосов
/ 04 марта 2011

В зависимости от того, как разработан ваш код, вы должны использовать объект SqlCommand для выполнения обновления без SqlDataAdapter.SqlDataAdapter используется неправильно, и он не нужен в зависимости от того, как построен ваш код.

Конструкция для адаптера DataAdapter

SqlDataAdapter = новый SqlDataAdapter (cmd);

устанавливает команду (cmd) в качестве команды SELECT для адаптера данных, а не команды обновления.(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;

непосредственно перед вызовом «Update».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...