Reputation: 173
I'm having an issue with inserting record to my local database. It inserts empty values instead of actual filled values.
I believe that there is a problem with my classes and passing values between different methods.
I created a library in which I keep my database table model called Contacts which have fields like first name, last name, phone number etc.
Then I have my AddContact()
method in Program.cs which checks user input and assigns its passed strings from user to my model's properties. Then I finally call another method which should insert a record based on SQL query.
I tried to run my program and fill user inputs and then I checked my database table to see if this contact was inserted. It did create new record though, but with blank, empty values. I would like to see filled values instead.
Note: I do not insert an ID value, because I set autoincrement on ContactID.
Here's my model:
namespace ContactsLibrary.Model
{
public class ContactModel
{
string firstName, lastName, nickName, companyName, phoneNumber, emailAddress, urlAddress, birthdayDate, notes;
public string FirstName { get => firstName; set => firstName = value; }
public string LastName { get => lastName; set => lastName = value; }
public string NickName { get => nickName; set => nickName = value; }
public string CompanyName { get => companyName; set => companyName = value; }
public string PhoneNumber { get => phoneNumber; set => phoneNumber = value; }
public string EmailAddress { get => emailAddress; set => emailAddress = value; }
public string UrlAddress { get => urlAddress; set => urlAddress = value; }
public string BirthdayDate { get => birthdayDate; set => birthdayDate = value; }
public string Notes { get => notes; set => notes = value; }
}
}
Here's my Program.cs methods:
static void AddContact()
{
CheckUserAddContactInput();
InsertToDatabase insert = new InsertToDatabase();
insert.InsertContact();
}
static void CheckUserAddContactInput()
{
ContactsLibrary.Model.ContactModel contactModel = new ContactsLibrary.Model.ContactModel();
Console.Write("Imię: ");
contactModel.FirstName = Console.ReadLine();
Console.Write("Nazwisko: ");
contactModel.LastName = Console.ReadLine();
Console.Write("Pseudonim: ");
contactModel.NickName = Console.ReadLine();
Console.Write("Firma: ");
contactModel.CompanyName = Console.ReadLine();
Console.Write("Numer telefonu: ");
contactModel.PhoneNumber = Console.ReadLine();
Console.Write("Adres e-mail: ");
contactModel.EmailAddress = Console.ReadLine();
Console.Write("Strona internetowa: ");
contactModel.UrlAddress = Console.ReadLine();
Console.Write("Data urodzin: ");
contactModel.BirthdayDate = Console.ReadLine();
Console.Write("Notatki: ");
contactModel.Notes = Console.ReadLine();
}
And finally InsertToDatabase.cs:
namespace ContactsConsoleApp
{
class InsertToDatabase
{
public void InsertContact()
{
ContactsLibrary.Model.ContactModel contactModel = new ContactsLibrary.Model.ContactModel();
string sqlQuery = $"INSERT INTO Contacts (ContactFirstName, ContactLastName, ContactNickName, ContactCompanyName, ContactPhoneNumber, ContactEmailAddress, ContactUrlAddress, ContactBirthdayDate, ContactNotes) VALUES('{contactModel.FirstName}', '{contactModel.LastName}', '{contactModel.NickName}', '{contactModel.CompanyName}', '{contactModel.PhoneNumber}', '{contactModel.EmailAddress}', '{contactModel.UrlAddress}', '{contactModel.BirthdayDate}', '{contactModel.Notes}')";
SqlCommand sqlCommand = new SqlCommand(sqlQuery, DatabaseConnection.connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.InsertCommand = new SqlCommand(sqlQuery, DatabaseConnection.connection);
dataAdapter.InsertCommand.ExecuteNonQuery();
sqlCommand.Dispose();
}
}
}
May anyone tell me what I am doing wrong?
Kind regards
Upvotes: 2
Views: 89
Reputation: 183
This is a very common mistake you have made. What you have done is, you have initiated a new variable for the "ContactModel" class. This means that it is not using the one you are currently working with, instead it makes a new class and therefore has empty values.
What you might want to do is this :
Make sure to return the "ContactModel" instance you made :
static ContactsLibrary.Model.ContactModel CheckUserAddContactInput()
{
ContactsLibrary.Model.ContactModel contactModel = new ContactsLibrary.Model.ContactModel();
Console.Write("Imię: ");
contactModel.FirstName = Console.ReadLine();
Console.Write("Nazwisko: ");
contactModel.LastName = Console.ReadLine();
Console.Write("Pseudonim: ");
contactModel.NickName = Console.ReadLine();
Console.Write("Firma: ");
contactModel.CompanyName = Console.ReadLine();
Console.Write("Numer telefonu: ");
contactModel.PhoneNumber = Console.ReadLine();
Console.Write("Adres e-mail: ");
contactModel.EmailAddress = Console.ReadLine();
Console.Write("Strona internetowa: ");
contactModel.UrlAddress = Console.ReadLine();
Console.Write("Data urodzin: ");
contactModel.BirthdayDate = Console.ReadLine();
Console.Write("Notatki: ");
contactModel.Notes = Console.ReadLine();
return contactModel;
}
Add a parameter to pass the current "ContactModel" you are using :
namespace ContactsConsoleApp
{
class InsertToDatabase
{
public void InsertContact(ContactsLibrary.Model.ContactModel contactModel)
{
string sqlQuery = $"INSERT INTO Contacts (ContactFirstName, ContactLastName, ContactNickName, ContactCompanyName, ContactPhoneNumber, ContactEmailAddress, ContactUrlAddress, ContactBirthdayDate, ContactNotes) VALUES('{contactModel.FirstName}', '{contactModel.LastName}', '{contactModel.NickName}', '{contactModel.CompanyName}', '{contactModel.PhoneNumber}', '{contactModel.EmailAddress}', '{contactModel.UrlAddress}', '{contactModel.BirthdayDate}', '{contactModel.Notes}')";
SqlCommand sqlCommand = new SqlCommand(sqlQuery, DatabaseConnection.connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.InsertCommand = new SqlCommand(sqlQuery, DatabaseConnection.connection);
dataAdapter.InsertCommand.ExecuteNonQuery();
sqlCommand.Dispose();
}
}
}
Then pass it through when you call the function :
static void AddContact()
{
ContactsLibrary.Model.ContactModel contactModel = CheckUserAddContactInput();
InsertToDatabase insert = new InsertToDatabase();
insert.InsertContact(contactModel);
}
Upvotes: 3