Zrobiłem bazę danych SQL i formularz C #. Formularz działa poprawnie. Kiedy wysyłam dane z formularza, dane są poprawnie wstawiane do tabeli. Ale próbowałem, jeśli formularz jest tylko jedno pole lub jest pusty, nie wysyłaj danych do tabeli, przygotowałem, że nie zezwalam na puste dane w polach tabeli. Ale poza kluczem podstawowym mogę wstawiać do wartości null dane dla innych pól.

To jest mój główny kod formularza. Proszę popraw to

    private void Form1_Load(object sender, EventArgs e)
    {
        txtPassword.PasswordChar = '*';
        txtPasswordNew.PasswordChar = '*';
        gboxSignup.Visible = false;
    }

    private void btnOrSignup_Click(object sender, EventArgs e)
    {
        gboxSignup.Visible = true;

    }

    private void btnSignupNew_Click(object sender, EventArgs e)
    {
        if (txtFirstNameNew.Text != null && txtLasyNameNew.Text != null && txtUserNameNew.Text != null && txtPasswordNew.Text != null && txtEmailNew.Text != null)
        {
            try
            {
                Connect obj = new Connect();
                obj.conn.ConnectionString = obj.locate;
                obj.conn.Open();
                String insertUser = "insert into userTable values ('"+txtFirstNameNew.Text+ "','" +txtLasyNameNew.Text+ "','" +txtEmailNew.Text+ "','" +txtUserNameNew.Text+ "','" +txtPasswordNew.Text+"')";
                obj.cmd.Connection = obj.conn;
                obj.cmd.CommandText = insertUser;
                obj.cmd.ExecuteNonQuery();
                MessageBox.Show("Signup has been completed");
                gboxSignup.Visible = false;
                txtFirstNameNew.Text = "";
                txtLasyNameNew.Text = "";
                txtEmailNew.Text = "";
                txtPasswordNew.Text = "";
                txtUserNameNew.Text = "";



            }   
            catch (Exception ex)
            {
                MessageBox.Show("ERROR" + ex);
            }
        }
        else
        {
            MessageBox.Show("ERROR!!!  Fill in the All Fields");
        }
    }

    private void btnLogin_Click(object sender, EventArgs e)
    {
        if(txtUserName.Text != null && txtPassword.Text != null)
        {
            try
            {
                Connect obj = new Connect();
                obj.conn.ConnectionString = obj.locate;

                obj.conn.Open();
                SqlDataAdapter adapter = new SqlDataAdapter ("SELECT COUNT (*) FROM userTable where UserName = '" +txtUserName.Text+"' and Password = '"+txtPassword.Text+"' ", selectConnection: obj.conn );
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                if (dt.Rows[0][0].ToString() == "1")
                {
                    frmWelcome meLoad = new frmWelcome();
                    meLoad.Visible = true;
                    this.Hide();
                    MessageBox.Show("Sucessfully Login");
                }
                else
                {
                    MessageBox.Show("User Name Or Password is incorrect - Try it");
                }
                obj.conn.Close();

            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        else
        {
            MessageBox.Show("No Empty Field Allowed");
        }
    }
}

}

To jest kod klasy connect

class Connect
{
    public SqlConnection conn = new SqlConnection();
    public SqlCommand cmd = new SqlCommand();
    public string locate = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename='J:\D Drive\Excersize\C#\Windowsform\WindowsFormsApp1\UserDB.mdf';Integrated Security=True";

}

To jest mój projekt stołu (userTable) tutaj wprowadź opis obrazu

To jest po wstawieniu danych. tutaj wprowadź opis obrazu

To jest mój projekt formularza tutaj wprowadź opis obrazu

Insert can null data tutaj wprowadź opis obrazu

Wstaw dane spróbuj nie używać klucza podstawowego tutaj wprowadź opis obrazu

-1
TipVisor 1 kwiecień 2020, 20:45

3 odpowiedzi

Najlepsza odpowiedź

Ciąg pola tekstowego nie jest pusty, jest po prostu pusty. Więc baza danych mogłaby to wstawić. Zamiast tego użyj !string.IsNullOrEmpty(text) text != null

2
Tấn Nguyên 1 kwiecień 2020, 17:54

Ta odpowiedź dotyczy Twoich danych:

Twoim kluczem podstawowym jest kolumna „Imię”

W pierwszym wierszu znajduje się osoba z pustym „imieniem” i nazwiskiem „tharaka”.

Ponieważ nie możesz powtórzyć klucza podstawowego, oznacza to, że nie możesz mieć innego wiersza z pustym „Imię”

Więc na obrazie, który pokazuje błąd, próbujesz wstawić puste pole „Imię”, co jest niedozwolone.

Aby rozwiązać problem, po prostu upewnij się, że „Imię” ma zawsze wartość. W przeciwnym razie będziesz musiał usunąć go jako kolumnę klucza podstawowego.

Oznacza to również, że nie możesz mieć dwóch wierszy z tym samym „imieniem”. Sugerowałbym dodanie pola ID, z automatycznie zwiększającą się liczbą całkowitą jako kluczem podstawowym

0
peterpie 1 kwiecień 2020, 18:02

Użyłbym

if (!string.IsNullOrWhitespace(txtFirstNameNew.Text) && !string.IsNullOrWhitespace(txtLasyNameNew.Text) && !string.IsNullOrWhitespace(txtUserNameNew.Text) && !string.IsNullOrWhitespace(txtPasswordNew.Text) && !string.IsNullOrWhitespace(txtEmailNew.Text))

String.IsNullOrEmpty nie wykrywa wielkości liter, jeśli w polach tekstowych znajdują się jakiekolwiek białe znaki.

1
Kupokev 1 kwiecień 2020, 20:17