2016-05-25 2 views
3

У меня есть глобальная переменная, которая настроена для таймера «I», программа, которую я создаю, имеет пользовательский игровой уровень и сохраняет свое время уровня в базе данных с другими пользователями. Это то, что у меня уже есть.Сохраните значение таймера в базе данных? C#

public static class Global 
{ 
    public static int I = 0; 
} 

^Это глобальная переменная для таймера.

 SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Adam\Documents\Data2.mdf;Integrated Security=True;Connect Timeout=30"); 
     SqlDataAdapter sad = new SqlDataAdapter("Select Count(*) From Login where Username= '" + txtUsername.Text + "' and Password='" + txtPassword.Text + "'", con); 
     SqlCommand cmd = new SqlCommand("INSERT INTO HighScore (Username, Score) VALUES(@Username,@Score)", con); 
     DataTable dt = new DataTable(); //empty table 
     sad.Fill(dt); 
     if (dt.Rows[0][0].ToString() == "1") 
     { 
      con.Open(); 
      cmd.Parameters.AddWithValue("@USERNAME", txtUsername.Text); 
      cmd.Parameters.AddWithValue("@Score", Global.I); 
     } 
     else // else it will display this error 
     { 
      MessageBox.Show("Please enter the correct login details"); 
     } 

^^ это код для конечного экрана игры, как вы можете видеть, я уже пробовал принимать Global.I и addwithvalue @Score, который находится в таблице HighScore в моей базе данных. Теперь, когда я нажимаю кнопку, он ничего не пишет в базу данных, но я не получаю никаких ошибок при попытке сохранить, вот почему я запутался. Любая помощь будет оценена, спасибо.

+0

Просто хочу сообщить вам, что адаптеры данных и т. Д. - чрезвычайно устаревшая технология. Вероятно, вы должны использовать Entity Framework. – usr

+0

Что касается фактического вопроса: действительно ли вы выполняете команду? Отправьте этот код, поместите точку останова на эту строку и убедитесь, что линия даже нажата. – usr

+1

Нет, все в порядке. Но вы действительно должны выполнять запросы, которые вы пишете. Это всегда помогает. – Will

ответ

1

перед выполнением любой команды вы должны сначала открыть соединение. Вы открываете соединение после звонка Fill() !!. Вам также нужно будет выполнить cmd. Попробуйте:

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Adam\Documents\Data2.mdf;Integrated Security=True;Connect Timeout=30"); 
SqlDataAdapter sad = new SqlDataAdapter("Select Count(*) From Login where Username= '" + txtUsername.Text + "' and Password='" + txtPassword.Text + "'", con); 

SqlCommand cmd = new SqlCommand("INSERT INTO HighScore (Username, Score) VALUES(@Username,@Score)", con); 
con.Open(); 
cmd.Parameters.AddWithValue("@USERNAME", txtUsername.Text); 
cmd.Parameters.AddWithValue("@Score", Global.I); 
DataTable dt = new DataTable(); //empty table 
sad.Fill(dt); 
cmd.ExecuteNonQuery(); 

Это также замечательно, что вы знаете, как правильно использовать параметры, однако использовать их только в 1 случае вместо обоих запросов.

+1

Holy moly Спасибо, что вы заработали для меня! :) –

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