Je construis une application basée sur l'inventaire qui peut être directement exécutée à partir de n'importe quel pc sans installation et donc j'utilise SQL CE .. Sur Démarrer, je vérifie si la base de données est présente. Sinon, je suis en train de créer une nouvelle base de données:SQL CE Ne pas mettre à jour les valeurs de base de données à partir des formulaires Windows
try
{
string conString = "Data Source='ITM.sdf';LCID=1033;Password=ABCDEF; Encrypt = TRUE;";
SqlCeEngine engine = new SqlCeEngine(conString);
engine.CreateDatabase();
return true;
}
catch (Exception e)
{
//MessageBox.Show("Database Already Present");
}
La base de données est créée correctement et je peux accéder à la base de données pour créer des tableaux et .. Le problème que je suis face est - j'insérer et mettre à jour les dossiers dans les fenêtres sous forme sur le bouton cliquez avec le code:
using (SqlCeConnection connection = new SqlCeConnection(DatabaseConnection.connectionstring))
{
connection.Open();
String Name = NameTxt.Text.ToString();
String Phone = PhoneTxt.Text.ToString();
double balance = Double.Parse(BalanceTxt.Text.ToString());
String City = CityTxt.Text.ToString();
string sqlquery = "INSERT INTO Customers (Name,Phone,Balance,City)" + "Values(@name,@phone, @bal, @city)";
SqlCeCommand cmd = new SqlCeCommand(sqlquery, connection);
cmd.Parameters.AddWithValue("@name", Name);
cmd.Parameters.AddWithValue("@phone", Phone);
cmd.Parameters.AddWithValue("@bal", balance);
cmd.Parameters.AddWithValue("@city", City);
int x = cmd.ExecuteNonQuery();
if (x > 0)
{
MessageBox.Show("Data Inserted");
}
else
{
MessageBox.Show("Error Occured. Cannot Insert the data");
}
connection.Close();
}
et le code Updation est
using (SqlCeConnection connection = new SqlCeConnection(DatabaseConnection.connectionstring))
{
connection.Open();
int idtoedit = select_id_edit;
String Name = NameEditTxt.Text.ToString();
String Phone = metroTextBox1.Text.ToString();
String City = CityEditTxt.Text.ToString();
string sqlquery = "Update Customers Set Name = @name, Phone = @phone,City = @city where Id = @id";
SqlCeCommand cmd = new SqlCeCommand(sqlquery, connection);
cmd.Parameters.AddWithValue("@name", Name);
cmd.Parameters.AddWithValue("@phone", Phone);
cmd.Parameters.AddWithValue("@id", idtoedit);
cmd.Parameters.AddWithValue("@city", City);
int x = cmd.ExecuteNonQuery();
if (x > 0)
{
MessageBox.Show("Data Updated");
}
else
{
MessageBox.Show("Error Occured. Cannot Insert the data");
}
loadIntoGrid();
connection.Close();
}
Chaque fois que j'exécuter du code pour l'insertion et la mise à jour des dossiers - Les enregistrements sont reflétés dans DataGrid rempli avec l'adaptateur de la table de base de données. Mais une fois que je redémarre l'application, les valeurs n'apparaissent pas dans la base de données. Une fois sur un million, les valeurs sont reflétées dans la base de données. Je ne peux pas comprendre la raison derrière ce problème.
Je reffered à ces articles:
C# - ExecuteNonQuery() isn't working with SQL Server CE
Insert, Update, Delete are not applied on SQL Server CE database file for Windows Mobile
Mais depuis que je suis base de données crée par programmation - Il devient créé directement à bin/debug et je ne peux pas le voir en solution Explorateur dans Visual Studio pour modifier les options de copie
Juste pour clarifier sont à la fois mise à jour et insertion de requête en cours d'exécution ** en même temps ** quand 'si (x> 0)'? –
Non .. Ils fonctionnent séparément –