Обновите один и тот же столбец в нескольких таблицах sql, используя C # - PullRequest
3 голосов
/ 27 августа 2010

Сценарий:
У меня есть мобильный телефон, сравнивающий сайт asp.net, который отображает предложения различных сетей. Данные о сделках, которые мы получаем от сетей, находятся в таблице Excel. Мы импортируем данные из таблиц Excel в таблицы каждой сети в нашей базе данных. Теперь данные, которые мы получаем, не согласованы для каждой сети, например, сеть может назвать имя, дать имя телефона как «кривая 8250», а другой может дать его как «кривая 8250», а другой может дать его как «8250 кривая».

Теперь у нас есть еще один модуль, который позволяет пользователю просматривать сделки определенного телефона, доступные во всех сетях. Чтобы этот модуль работал, мы должны сделать так, чтобы имена телефонов были одинаковыми для всех сетей.
Для этого я планирую создать модуль для веб-администратора, который отображает телефонные имена (возможно, в виде таблицы) из всех сетевых таблиц, и веб-мастер может редактировать телефонные имена, чтобы сделать их согласованными. Извлечь отдельные имена столбцов из всех таблиц было легко, и это сделано.

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

Редактировать: Я всегда забываю что-то добавить: @. Я знаю, что это может быть сделано трудным путем, с помощью кода, запустив цикл. Но есть ли какой-нибудь более простой и удобный выход? как какой-то контроль данных, который в этой ситуации немного облегчил бы жизнь?

Обновление:
Я пытался сделать это с помощью кода позади. Я сделал вид сетки и отобразил данные, используя шаблоны элементов, а также предоставил текстовое поле во втором шаблоне. Затем, нажав кнопку, я запускаю этот код:

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings[0].ToString());
        foreach(GridViewRow gvr in GridView1.Rows)
        {                
            TextBox tb = (TextBox)gvr.FindControl("New Value");
            Label lbl = (Label)gvr.FindControl("Old Value");
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            if (lbl.Text != tb.Text)
            {

                try   //updation if primary key constraint is not broken
                {
                    con.Open();
                    cmd.CommandText = myupdatecommand; /*this is not the actual command that I'm passing, the command I'm passing does contain the values lbl.Text & tb.Text. This is just to make it a better read.*/
                    cmd.ExecuteNonQuery();
                }
                catch (SqlException sqe)
                {
                    if (sqe.ErrorCode == -2146232060)//if primary key constraint is broken
                    {
                        try   
                        {
                            //delete the row from the table that contains only unique phone names
                            cmd.CommandText = deletecommand;
                            cmd.ExecuteNonQuery();
                        }
                        catch { }
                    }
                }
                finally
                {
                    con.Close();
                }


                //Update table2
                try          //only updation as here the phone name is not a primary key
                {
                    con.Open();
                    cmd.CommandText = updatetable2;
                    cmd.ExecuteNonQuery();
                }
                catch
                {

                }
                finally
                {
                    con.Close();
                }

                .
                .
                .
                //similarily update rest of the tables
                .
                .
                .
                Response.Redirect(Request.Url.ToString());
            }
       }

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

Любая помощь по этому вопросу высоко ценится. Заранее спасибо!

PS- Я использую ASP.Net 3.5 с c # в качестве кода и SQL Server 2005 в качестве внутреннего.

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Если честно, теперь мне стыдно отвечать на свой вопрос.

Проблема заключалась лишь в том, что я ошибочно поместил Response.Redirect(Request.Url.ToString());

внутри цикла if, которыйСам внутри цикла foreach.

Когда я перестану делать глупые ошибки: |

0 голосов
/ 27 августа 2010

Хорошо, я собираюсь предположить, что вы используете LINQ-to-Sql, но теоретически это не имеет значения, основной принцип такой же.строка, по одному для каждой базы данных.Предположительно, у вас уже есть это.

using (TransactionScope scope = new TransactionScope())
{
    foreach (var connStr in listOfConnStr)
    {
        using (var db = new MyDataContext(connStr);
        {
            // do update here.
        }
    }
}

Вот и все.

Вы можете передать часть "do update here" как лямбда-функцию.

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