Доступ к базе данных, проблемы с запятой "," и точка "."в десятичных значениях при вставке данных в Access-db из формы c # windows - PullRequest
0 голосов
/ 18 декабря 2018

enter image description here
У меня проблемы с вставкой десятичных значений в мою версию базы данных Access (2007 - 2010).

Скажем, у меня в текстовых полях следующие значения:
txtTotalAmount.Text = 3,5
txtSalesTax.Text = 3,6
txtTotalToPay.Text = 3,7

Однако значения базы данных показывают:
TotalAmount as 35
SalesTax как 36
TotalToPay как 37

Мои настройки базы данных такие же, как показано на рисунке ..
А вот мой код:

private void button1_Click(object sender, EventArgs e)
{
try
    {
        string connstring = ConfigurationManager.ConnectionStrings["Db"].ConnectionString;
        using (OleDbConnection conn = new OleDbConnection(connstring))
        {
            conn.Open();
            using (OleDbCommand cmd = new OleDbCommand("INSERT INTO [OrderItem](TotalAmount, SalesTax, TotalToPay) VALUES(@TotalAmount, @SalesTax, @TotalToPay)", conn))
            {
                cmd.Parameters.AddWithValue("@TotalAmount", Convert.ToDecimal(txtTotalAmount.Text));
                cmd.Parameters.AddWithValue("@SalesTax", Convert.ToDecimal(txtSalesTax.Text));
                cmd.Parameters.AddWithValue("@TotalToPay", Convert.ToDecimal(txtTotalToPay.Text));
                cmd.ExecuteNonQuery();
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Я пытался даже так;

cmd.Parameters.AddWithValue("@TotalToPay", decimal.Parse(txtToPay.Text));

и

cmd.Parameters.AddWithValue("@SalesTax", OleDbType.Decimal).Value = Convert.ToDecimal(txtTest.Text);

Но получается та же проблема.Пожалуйста помоги.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Согласно , опубликованному , я думаю, что проблема в том, что .NET ожидает, что вы зададите десятичную точку с точкой вместо запятой, что связано с тем, как.Таким образом, я рекомендую использовать для этого параметра тип OleDbType.VarChar вместо OleDbType.Decimal ...

cm.Parameters.Add("@decimalcolum", OleDbType.VarChar);
cm.Parameters["@decimalcolum"].Value=decimalvalue;
cm.ExecuteNonQuery();

Он был протестирован на вьетнамском, французском (Франция), английском (США) регионе иязык.Я надеюсь, что эти проблемы решены!

0 голосов
/ 18 декабря 2018

Очень странно, но мне не нужно использовать Convert.ToDecimal ... Так же, как

cmd.Parameters.AddWithValue("@SalesTax", txtSalesTax.Text); Without converting and working fine in database ..;)
...