c# и ms sql server 2005

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by realcoder, 5 Jul 2011.

  1. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    в общем столкнулся с такой проблемой: с# не обновляет данные на сервере. данные в таблице(dagtgridview в программе) изменяются, но на секуль сервере остаются неизменными. при этом никаких exception'ов не вылазит и при перезапуске программы они естественно становяться прежними. как решить подобную проблему? может нужно изменить настройки сервера чтобы он разрешал клиентским приложениям выполнять Insert uзdate запросы? или у меня код неправильно написан:
    Code:
    сохранение изменений:
    private void button1_Click(object sender, EventArgs e)
            {
                 BindingSource bsrc = new BindingSource();
                System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
                string conn_string = @"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=kadri;Data Source=DNAPC\SQLEXPRESS";
                conn.ConnectionString = conn_string;
                try
                {
                    conn.Open();
    
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message);
                }
                System.Data.OleDb.OleDbDataAdapter adapt = new System.Data.OleDb.OleDbDataAdapter("SElect * from sotrudnik",conn);
               DataSet dataset = new System.Data.DataSet();
                adapt.Fill(dataset);
                adapt.UpdateCommand = new System.Data.OleDb.OleDbCommand("UPDATE Sotrudnik set ФИО = ?, Должность= ?, Телефон = ?, Анкета = ?, Договор = ? WHERE ID = ?");
                adapt.UpdateCommand.Parameters.Add("ФИО", System.Data.OleDb.OleDbType.VarChar, 10);
                adapt.UpdateCommand.Parameters.Add("Должность", System.Data.OleDb.OleDbType.VarChar, 10);
                adapt.UpdateCommand.Parameters.Add("Телефон", System.Data.OleDb.OleDbType.VarChar, 10);
                adapt.UpdateCommand.Parameters.Add("Анкета", System.Data.OleDb.OleDbType.VarChar, 10);
                adapt.UpdateCommand.Parameters.Add("Договор", System.Data.OleDb.OleDbType.VarChar, 10);
                adapt.UpdateCommand.Parameters.Add("ID", System.Data.OleDb.OleDbType.Integer, 10);
                adapt.UpdateCommand.Connection = conn;
                adapt.Update(dataset.Tables[0]);
            }
    
    
    //загрузка в таблицу
      private void readdata()
            {
                BindingSource bsrc = new BindingSource();
                System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
                string conn_string = @"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=kadri;Data Source=DNAPC\SQLEXPRESS";
                conn.ConnectionString = conn_string;
                try
                {
                    conn.Open();
    
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message);
                }
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandText = "Select * from sotrudnik";
                System.Data.OleDb.OleDbDataAdapter adapt = new System.Data.OleDb.OleDbDataAdapter(cmd);
                DataSet dataset = new System.Data.DataSet();
                adapt.Fill(dataset);
                conn.Close();
                dataGridView1.AutoGenerateColumns = true;
                bsrc.DataSource = dataset.Tables[0];
                dataGridView1.DataSource = bsrc;
    
    
             
    
            }
            public KadrFrm()
            {
                InitializeComponent();
                readdata();
            }
    
     
  2. B0ri$ka

    B0ri$ka Banned

    Joined:
    1 Jul 2011
    Messages:
    33
    Likes Received:
    2
    Reputations:
    0
    Аааа!!! Мои глаза! Кириллические параметры!
     
  3. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    думаеш стоит переименовать поля латинскими симовлами.

    З.Ы. хочу добавить, что и в Delphi аналогичный код не работал. но там кода собствено нет - просто связанные компоненты ado И оперирование таблицей через tadotable. таблицу оно читало но тоже не изменяло.
     
  4. Feonor

    Feonor Elder - Старейшина

    Joined:
    23 Jul 2008
    Messages:
    128
    Likes Received:
    52
    Reputations:
    19
    Читаем MSDN внимательнее. Делаем аналогично.
    Code:
    // Assumes that connection is a valid OleDbConnection object.
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    
    OleDbCommand selectCMD = new OleDbCommand(selectSQL, connection);
    adapter.SelectCommand = selectCMD;
    
    // Add parameters [B]and set values[/B].
    [U]selectCMD.Parameters.Add(
      "@CountryRegion", OleDbType.VarChar, 15)[B].Value = "UK";[/B][/U]
    [U]selectCMD.Parameters.Add(
      "@City", OleDbType.VarChar, 15)[B].Value = "London"[/B];[/U]
    
    DataSet customers = new DataSet();
    adapter.Fill(customers, "Customers");
    
     
  5. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    сделал как написано на msdn:
    Code:
          public DataSet CreateCmdsAndUpdate(string connectionString,
        string queryString)
            {
                using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    OleDbDataAdapter adapter = new OleDbDataAdapter();
                    adapter.SelectCommand = new OleDbCommand(queryString, connection);
                    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    
                    connection.Open();
    
                    DataSet customers = new DataSet();
                    adapter.Fill(customers);
    
                    //code to modify data in dataset here
    
                    adapter.Update(customers);
    
                    return customers;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                   DataSet ds=CreateCmdsAndUpdate(@"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=DNAPC\SQLEXPRESS",
                        @"UPDATE [kadri].[dbo].[table_test]
                     SET [key1] = 1
                     ,[field] = 'ololol'
                         WHERE key1=1");
                }
                catch (Exception except)
                {
             richTextBox1.AppendText(except.Message);
                }
    
            }
    
    привыполнениии возникает exception:
    Операции Update не удалось найти TableMapping["Table"] или DataTable "Table".
    не пойму в чем проблема?
    при выполнении аналогичного запроса:
    возникает та же ошибка. в sql server managment studio оба запроса выполняются корректно
     
  6. Feonor

    Feonor Elder - Старейшина

    Joined:
    23 Jul 2008
    Messages:
    128
    Likes Received:
    52
    Reputations:
    19
    Ты не понимаешь что пишешь видимо.
    Code:
     public DataSet CreateCmdsAndUpdate(string connectionString,    string queryString) //параметры: строка подключения, строка СЕЛЕКТ
            {
                using (OleDbConnection connection = new OleDbConnection(connectionString))// подключаемся к БД
                {
                    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
                    adapter.SelectCommand = new OleDbCommand(queryString, connection);
                    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    
                    connection.Open();
    
                    DataSet customers = new DataSet();
                    adapter.Fill(customers); //вот тут заполняем адаптер (используя селект из 2го параметра)
    
                   [B] //code to modify data in dataset here
                    //ПЕРЕВОД: Тут пиши код который меняет данные в датасете (тут пишешь как должно быть после обновления!)[/B]
    
                    adapter.Update(customers); //Обновляем
    
                    return customers;
                }
            }
    Разберись один раз лучше. Хотя если тебе спаммеры на шарпе шлепать, то не слушай меня, копипасть все подряд дальше. :(
     
    2 people like this.
  7. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    нет.я пишу промышленное приложение на с#, которое будет работать на предприятии(сервак будет иметь базы для каждого отдела(отдел кадров, отдел продаж, финансовый отдел и т.д.), а работники должны будут рулить каждый своей базой) в общем типа 1c только попроще.
    с# просто недавно начал изучать, а функцию из примера msdn взял