Sisimośki
Sisimośki

Reputation: 173

My insert method to a database inserts empty values instead of filled ones C#

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

Answers (1)

JuiceeGreen
JuiceeGreen

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

Related Questions