2013-10-08 2 views
-1

Когда я запускаю свое приложение, оно до конца доходит до конца, но когда я проверяю свою БД впоследствии, он никогда не показывает никаких данных. Вот мой код:SQL CE Не вводить информацию в DB

private void button1_Click(object sender, EventArgs e) 
    { 
     string saltedcryps = saltpassword(10); 
     string passWithSalt = (textBox1.Text + saltedcryps); 
     string hashedResult = hashPassAndSalt(passWithSalt); 
     if (checkPasswordsMatch() == "B") 
     { 
      SqlCeConnection myConnection = new SqlCeConnection("Data Source = pwdb.sdf"); 
        try 
        { 
         myConnection.Open(); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.ToString()); 
        } 
        SqlCeCommand myCommand = new SqlCeCommand("INSERT INTO PW Values ('Master', '" + saltedcryps + "', '" + hashedResult + "');", myConnection); 
        myCommand.ExecuteNonQuery(); 
        myConnection.Close(); 
        this.Hide(); 

     } 
    } 
    private string checkPasswordsMatch() 
    { 
     if (textBox1.Text == "") 
     { 
      MessageBox.Show("Passwords cannot be empty"); 
      return "A"; 
     } 
     else 
     { 
      MessageBox.Show(textBox1.Text == textBox2.Text ? "Thanks for registering!" : "Your passwords do not match"); 
      return "B"; 
     } 
    } 
    private string saltpassword(int size) 
    { 
     RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); 
     byte[] buff = new byte[size]; 
     crypto.GetBytes(buff); 
     return Convert.ToBase64String(buff); 
    } 
    private string hashPassAndSalt(string passWithSalt) 
    { 
     HashAlgorithm hashAlg = new SHA256CryptoServiceProvider(); 
     byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(passWithSalt); 
     byte[] bytHash = hashAlg.ComputeHash(bytValue); 
     string base64 = Convert.ToBase64String(bytHash); 
     return base64; 
    } 
} 

Это button1_Click, что проблема заключается в том, Когда она работает myCommand.ExecuteNonQuery();. он никогда не выдает исключение, он просто продолжается, без фактического ввода какой-либо информации ...

У кого-нибудь есть ключ?

+0

Почему вы только открываете соединение в своем блоке 'try'? Что произойдет, если вы переместите 'SqlCeCommand myCommand = новый SqlCeCommand (« INSERT INTO PW Values ​​(«Master», «+ saltedcryps +», «+ hashedResult +» '); », myConnection); myCommand.ExecuteNonQuery(); myConnection.Close(); this.Hide(); 'в ваш блок' try'? – Brian

+0

все еще не работает. блок try пытается открыть соединение, а затем успешно проходит блок catch, а затем запускает следующий код. его в основном то же самое в любом случае –

+0

Посмотрите в свою папку bindebug на копию файла базы данных, наилучшим подходом является использование полного пути в строке подключения – ErikEJ

ответ

0

Попробуйте это:

if (checkPasswordsMatch() == "B") 
     { 
      SqlCeConnection myConnection = new SqlCeConnection("Data Source = pwdb.sdf"); 
        try 
        { 
         myConnection.Open(); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.ToString()); 
        } 
        SqlCeCommand myCommand = myConnection.CreateCommand(); 
        myCommand.CommandType = CommandType.Text; 
myCommand.CommandText = "INSERT INTO PW Values ('Master', '" + saltedcryps + "', '" + hashedResult + "');" 
        myCommand.ExecuteNonQuery(); 
        myConnection.Close(); 
        this.Hide(); 

     } 

Если это оленья кожа работает, попробуйте поставить путь Absolut на строке подключения.

+0

новый myConnection.CreateCommand() создает красную строку, тип или пространство имен myConnection не удалось найти. и "+ hashedResult +" '); создает «новая строка в константе» –

+0

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

+0

Вы пробовали это ?: SqlCeConnection myConnection = new SqlCeConnection ("Источник данных = /pwdb.sdf"); – Diego

0

Эта строка подключения выглядит неправильно; если вы не делаете что-то очень странное, вы должны использовать Data Source=|DataDirectory|pwDB.sdf.

Почему, по вашему мнению, ваша база данных «никогда не показывает данные»? Где вы ищете данные? В исходных исходных данных в вашем каталоге проектов? Это почти наверняка неправильно; при развертывании приложения вы не развертываете свой источник, не так ли? Вам нужно посмотреть в папке развертывания, обратитесь к this answer.

+0

база данных связана с проектом. Я сделал это в проекте? –

+0

Это нормально, @tony, но вы не развертываете проект при развертывании своего приложения, не так ли? Пожалуйста, предоставьте более подробную информацию, поскольку я не понимаю, что вы делаете. –

+0

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

0

Положите try catch на ExecuteNonQuery, чтобы вы могли видеть, что такое исключение, если оно, в противном случае должно быть чем-то с вашей строкой соединения (DataSource = pwDB.sdf не подходит мне) должен иметь идентификатор пользователя; Пароль; dataSource = ваш IP и начальный каталог:

 SqlCommand Command = new SqlCommand(YourQuery,myConnection); 

     myConnection.Open(); 
     int Rows=0; 
     try 
     { 
      Rows = Command.ExecuteNonQuery(); 
      myConnection.Close(); 

     } 
     catch (Exception ex) 
     { 
      conSMS.Close(); 
      string Msg = ex.Message; 
          //I log my exceptions 
      //Log("ERROR: "+RemoveSQ(Query)); 
      //Log(RemoveSQ(Msg)); 
     } 

     //check Rows here if there is no exception 
+0

его не на сервере или что-то в этом роде, оно было создано в проекте –

+0

Итак, где же база данных? Если он будет работать автономно только на пользовательском компьютере, тогда у вас должен быть сценарий для его создания на своем компьютере, как ну, чтобы они могли получить к нему доступ – cvetyab

+0

Я думал, что вы сделали базу данных в приложении, тогда она скопирует эту базу данных с приложением и будет использовать ее? –

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