Вычтите значение из столбца базы данных и из значения textBox в C#, и после вычета значение должно быть сохранено в новом столбце - PullRequest
0 голосов
/ 30 марта 2020

Мне нужна помощь, чтобы вычесть значение из столбца базы данных и из значения textBox в C#, и после вычета значение должно быть сохранено в новом столбце.

Имя столбца, содержащего значение, - "txttopup"

И после того, как обновленные значения должны быть сохранены в имени столбца - «txtbalance»

Я использую SQL Server 2014, я прикрепляю код и снимок базы данных

Please click here to preview database snap shot image

Код

private void button17_Click(object sender, EventArgs e)
{
    String ConString = "Data Source = DESKTOP - JENA\\SQLEXPRESS; Initial Catalog = Project_Smartcard; Integrated Security = True";

    SqlConnection cnn = new SqlConnection(ConString);

    // SqlCommand command;
    // SqlDataReader rd;

    String sql = "Select * from WriteCard";

    try
    {
        // cnn.Open();
        // MessageBox.Show("Connection is active!");
        // sc = new SqlCommand(sql, cnn);
        // rd = sc.ExecuteReader();

        // while (rd.Read())
        // {
        //    // Retrieved.Text = rd.row[6]["amount"].Tostring();
        // }

        // sc.Dispose();
        // cnn.Close();

        cnn.Open();

        SqlCommand command = new SqlCommand();
        command.Connection = cnn;
        command.CommandText = "update class set txtbalance = txttopup - " + Convert.ToInt32(totalpayment.Text);

        command.ExecuteNonQuery();

        cnn.Close();
    }  
}

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Код, который вы написали здесь, пытается обновить все строки, потому что вы не указали никаких условий (т. Е. Вам, вероятно, нужно предложение where). Также вы можете рассмотреть возможность использования параметров команды вместо объединения строк.

private void button17_Click(object sender, EventArgs e)
{
    String ConString = "Data Source = DESKTOP - JENA\\SQLEXPRESS; Initial Catalog = Project_Smartcard; Integrated Security = True";

    SqlConnection cnn = new SqlConnection(ConString);
    String sql = "Select * from WriteCard";

    try
    {
        cnn.Open();

        SqlCommand command = new SqlCommand();
        command.Connection = cnn;
        command.CommandText = "update class set txtbalance = txttopup - @txtPopup WHERE bdcardno= @barcode";
        command.Parameters.AddWithValue("@txtPopup", Convert.ToInt32(txtPopup.Text));
        // Somehow you will want to gather the barcode number, either through query or another textbox.
        command.Parameters.AddWithValue("@barcode", Convert.ToInt32(txtBarcode.Text));
        command.ExecuteNonQuery();
        cnn.Close();
    }  
}
0 голосов
/ 30 марта 2020

Вам необходимо использовать параметры SqlCommand, чтобы избежать SQL атак внедрения. Также примените фильтр, чтобы избежать обновления всех строк.

cnn.Open();
SqlCommand command = new SqlCommand();
command.Connection = cnn;
command.CommandText = "update class set txtbalance = txttopup - @txtPopup" +
                      " WHERE bdcardno = @bdcardno";
command.Parameters.Add("@txtPopup", SqlDbType.Int);
command.Parameters["@txtPopup"].Value = Convert.ToInt32(txtPopup.Text);
//Arrive at the bdcardno using business logic or get it from user
command.Parameters.Add("@bdcardno", SqlDbType.Int);
command.Parameters["@bdcardno"].Value = Convert.ToInt32(txtbdCardNo.Text);
command.ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...