2017-02-03 10 views
0

У меня есть программа, которую я создал в Visual studio. Программа в основном предназначена для хранения паролей для компаний и внешних счетов. Я хочу продолжить это приложение, автоматически создавая учетные записи компании при создании нового пользователя. Я обратился к этому, используя источник привязки. Я могу получить строку в базе данных, но она не использует встроенный sql-приращение. Я отправлю код, но я пытаюсь выяснить, не ошибся ли я в этом. Я не на 100% знаком с тем, как создаются соединители и классы, создаваемые визуальной студией при подключении решения к базе данных. Я не ищу код, чтобы помочь мне сделать это. Я ищу объяснения и рекомендации. Если вы ответите кодом, пожалуйста, помогите мне понять, объяснив код.C# с использованием источника привязки для добавления строки в таблицу sql с инкрементным полем идентификации

  DataSet.AccountsRow newdomainuserrow = DBDataSet.Accounts.NewAccountsRow(); 

      newdomainuserrow.USer = userIDTextBox.Text.ToString(); 
      newdomainuserrow.UserName = userIDTextBox.Text.ToString(); 

      System.DateTime moment = new DateTime(); 
      newdomainuserrow.Password = moment.Year; 
      newdomainuserrow.AccountName = "Domain"; 
      drawingNumDBDataSet.Accounts.Rows.Add(newdomainuserrow); 
      MessageBox.Show("User Saved"); 

      this.Validate(); 
      this.usersBindingSource.EndEdit(); 
      this.accountBindingSource.Endedit(); 
      this.tableAdapterManager.UpdateAll(this.DataSet); 

Вся помощь очень ценная.

Мэтт

+1

Какое поле базы данных автоматически увеличивается, и что вы имеете в виду, когда говорите, что «он не использует встроенный приращение sql?» Как правило, когда вы вставляете строку в sql, столбец идентификатора (ID) присваивается автоматически. Ваша программа C# не будет знать, какой идентификатор был назначен, если вы не запрашиваете это из базы данных (обычно используя SCOPE_IDENTITY(), чтобы получить последний идентификатор, созданный в пределах транзакции). Это может быть сделано для вас автоматически (за кадром) в зависимости от того, как вы привязываете строки - какова конкретная проблема, с которой вы сталкиваетесь? –

+0

Довольно очень сложно понять, в чем проблема. Совет. Дампируйте эти «коннекторы» и напишите код SQL самостоятельно, это поможет вам в долгосрочной перспективе понять, как работает ваша база данных. Кроме того, убедитесь, что SQL (Server?) - это правильная база данных для вашей задачи. Хранение данных учетной записи для нескольких сотен пользователей может быть выполнено с помощью таких вещей, как тривиальный, как зашифрованный текстовый файл (не рекомендуя его), и вам будет намного проще. Существует много реализаций баз данных, которые намного проще использовать, чем SQL (попробуйте CouchDB). – r41n

+0

Ну, если я привяжу текстовые поля к набору данных. Я просто называю набор данных, добавляет новый пользователь, заполняет текстовые поля, и обновление автоматически получает следующий номер прироста. Проблема в том, что я хочу установить значения полей без привязки к текстовому полю просто так, как вы видите row.column = value. Я не думаю, что вы можете сделать это с помощью набора данных. Поэтому я решил, что использование bindingsource - это путь, но я не могу заставить его вставлять и позволять sql делать свою работу. Поле называется тождеством, которое устанавливается равным 1 за раз. Мне жаль, если это не имеет смысла, я медленно все это изучаю. –

ответ

0

Я нашел решение. Поле id больше не является полем автоинкремента идентичности. Чтобы постепенно увеличивать поле id по одному программно, так как мне нужно написать инструкцию while, чтобы получить все числа, которые не были использованы. Это работает, если есть удаленная строка, она будет вставлять одну, где отсутствует один. вот код, который я использовал.

  Boolean gotnum;     
      gotnum = false; 
      int idnum = 1; 

      while (gotnum != true) 
      { 
       DrawingNumDBDataSet.AccountsRow actrw = drawingNumDBDataSet.Accounts.FindById(idnum); 
       idnum++; 
       if (actrw==null) 
       { 

        gotnum = true; 
        idnum--; 
       } 


      } 

Затем я установил поле Id = idnum. Это, вероятно, не самая лучшая практика, но это лучшее, что я мог бы придумать.