Обновление и постоянная проблема с набором данных - PullRequest
3 голосов
/ 13 мая 2009

Я думаю, что я скучаю по чему-то. здесь тривиально: я хочу обновить набор данных и отправить его обратно в базу данных, откуда он взялся, но я продолжаю получать:

Нарушение параллелизма: UpdateCommand затронул 0 из ожидается 1 запись.

Вот код, выдающий эту ошибку:

    public static void UpdateNorthWindWithDataset()
    {
        string connString =
            @"Data Source=localhost;Initial Catalog=NorthWind;Integrated Security=SSPI;";


        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();


            // Declaring a DataAdapter and initiating it with a Select and updateCommand                
            SqlDataAdapter da = new SqlDataAdapter();

            SqlCommand selectCmd = new SqlCommand("SELECT CustomerId, City, Region " +
                                                  "FROM Customers"
                                                  , conn
                );

            da.SelectCommand = selectCmd;

            SqlCommand updateCmd = new SqlCommand(
                @"UPDATE Customers SET City='@City', Region='@Region'" +
                @"WHERE CustomerID = '@CustomerID'",
                conn
                );

            updateCmd.Parameters.AddRange(
                new SqlParameter[]
                    {
                        new SqlParameter()
                            {
                                ParameterName = "@CustomerID",
                                SourceColumn = "customerid"
                            },
                        new SqlParameter()
                            {
                                ParameterName = "@City",
                                SourceColumn = "city",
                                SqlDbType = SqlDbType.VarChar
                            },
                        new SqlParameter()
                            {
                                ParameterName = "@Region",
                                SourceColumn = "region",
                                SqlDbType = SqlDbType.VarChar
                            }
                    }
                );


            da.UpdateCommand = updateCmd;

            // filling dataset
            DataSet ds = new DataSet();
            da.Fill(ds, "srcCustomers");

            // declaring and editing datatable
            DataTable tblCustomers = ds.Tables["srcCustomers"];

            foreach (DataRow row in tblCustomers.Rows)
            {
                row["City"] = "justUpdated";
                row["Region"] = "justUpdated too";
            }

            da.Update(ds, "srcCustomers");
        }
    }

Теперь моя конечная цель использует этот вид кода с MsAccess через OLEdb, но, поскольку я хотел, чтобы это было как можно более ясно, я попробовал MSSQL (все еще 2k здесь) с собственной поддержкой .net, но все равно получил ошибку ...

1 Ответ

2 голосов
/ 13 мая 2009

Обновление не выполняется, так как не удается найти запись, которая соответствует предоставленному идентификатору клиента, и я думаю, что это потому, что значение параметра не по умолчанию - существуют дополнительные значения для параметров SQL, которые позволят вам сделать это.

Если вы смотрите на OLEDB, вы должны знать, что параметры не названы (вы можете и, вероятно, должны назвать их, но они будут использоваться в порядке их ввода, а не в соответствии с их именами - это также означает, что вы не можете использовать один и тот же параметр дважды, что может быть немного утомительно).

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