2012-03-29 5 views
0

Я просто хочу, что говорит мой заголовок. Я уже прочитал все предыдущие аналогичные должности, но я не смог найти решение. Не могли бы вы заглянуть в мой код? EDIT: я не получаю исключения. Я просто не вижу новых данных в базе данных. EDIT2: первые 4 ответа не решают мою проблему, потому что я отредактировал код и добавил команду executenonquery.не может вставить данные в базу данных

int admin = 23; 
SqlConnection thisConnection = new SqlConnection(
    ConfigurationManager.ConnectionStrings[ 
    "Data Source=...;Persist Security Info=True;User ID=myusername;Password=mypassword"] 
    .ConnectionString); 
SqlCommand nonqueryCommand = thisConnection.CreateCommand(); 
thisConnection.Open(); 
nonqueryCommand.CommandText = "INSERT INTO Account (Username,Password,AdministratorId) VALUES (@username,@password,@admin)"; 

nonqueryCommand.Parameters.Add("@username", SqlDbType.VarChar, 20); 
nonqueryCommand.Parameters["@username"].Value = UsernameTextbox.Text.ToString(); 
nonqueryCommand.Parameters.Add("@password", SqlDbType.VarChar, 15); 
nonqueryCommand.Parameters["@password"].Value = PasswordTextbox.Text.ToString(); 
nonqueryCommand.Parameters.Add("@admin", SqlDbType.Int); 
nonqueryCommand.Parameters["@admin"].Value = admin; 

EDIT:nonquerycommand.ExecuteNonQuery(); 


thisConnection.Close(); 
+0

Пожалуйста, не прикрепите свои заголовки к «C#» и тому подобное. Для этого нужны теги. –

+1

Кроме того, какое именно исключение вы получаете? –

+0

Боковой комментарий, не храните ваши пароли напрямую. Сначала примените сильную хеш-функцию и сохраните * just * hash. Это даст вам меньше головной боли, когда ваша база данных будет украдена. – oleksii

ответ

6

Вы, кажется, не выполняете свой запрос. Выполните его, прежде чем закрыть соединение.

nonquerycommand.ExecuteNonQuery(); 
2

Вместо

nonqueryCommand.Parameters.Add("@username", SqlDbType.VarChar,20); 
nonqueryCommand.Parameters["@username"].Value = UsernameTextbox.Text.ToString(); 

Использование

nonqueryCommand.Parameters.AddWithValue("@username", UsernameTextbox.Text.ToString()); 

И выполнить запрос:

nonquerycommand.ExecuteNonQuery(); 
+0

, почему это лучше? – Dchris

+1

Намного проще в обслуживании. –

2

Chris Farmer имеет деньги.

Добавить ...

nonqueryCommand.ExecuteNonQuery(); 
+0

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

+0

Я, должно быть, кратко прочитал его ответ. Когда я опубликовал это, все, что я видел на его посту, было «Вы, похоже, не выполняете свой запрос. Выполняйте его, прежде чем закрыть свое соединение». Я пытался помочь вам, показывая вам, как выполнить ваш запрос. – ctorx

+0

Это имеет смысл тогда. И, к вашим услугам, вы получили дело прямо на своем. :) –

3

Две вещи выскочить сразу здесь.

  1. При извлечении строки соединения из ConfigurationManager.ConnectionStrings вы должны передать имя строки подключения в конфигурационном файле, а не строка подключения его собственный. Я подозреваю, что вы даже не можете получить правильную строку подключения.

  2. Необходимо указать ExecuteNonQuery() на примере nonqueryCommand.

0

вы должны назначить соединение с командой перед выполнением запроса для этого добавьте следующую строку перед thisConnection.Open();

nonqueryCommand.Connection=thisConnection; 
+0

Если вы используете connection.CreateCommand, как это сделал op, соединение уже назначено экземпляру команды. –

0

Вы должны выполнить запрос и закрыть соединение после этого, как показано ниже

nonquerycommand.ExecuteNonQuery(); 

или если вы хотите проверить, если запрос выполняется или не делать этого

if(nonquerycommand.ExecuteNonQuery()>0){ //some message or function } 

возвращаемое значение - количество строк, на которые влияет оператор.

Смежные вопросы