TextBox с запятой в sql

Я пытаюсь вставить текстовое поле с десятичным значением в sql. Если текстовое поле будет содержать точку, то оно отлично работает, но что, если кто-то будет использовать запятую вместо точки? Как я могу поймать обе ситуации?

Пример: я хочу вставить значение 1,9

con.Open();
SqlCommand cmd = new SqlCommand("Insert into inventory (price) values ('" + Convert.ToDecimal(textBox1.Text) + "')", con);
cmd.ExecuteNonQuery();
con.Close();

Я принимаю Error, преобразовывая тип данных varchar в float. Мне нужен любой пользователь, который будет помещать текстовое поле, точку или запятую, чтобы преобразовать его как значение float в sql

c#,sql-server,sql-server-2008,

0

Ответов: 1


1 принят

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

    decimal decimalValue;

    NumberFormatInfo formatWithPeriod = CultureInfo.InvariantCulture.NumberFormat;
    if (!Decimal.TryParse(textBox.Text, NumberStyles.AllowDecimalPoint, formatWithPeriod, out decimalValue))
    {
        NumberFormatInfo formatWithComma = (NumberFormatInfo)formatWithPeriod.Clone();
        formatWithComma.NumberDecimalSeparator = ",";
        if (!Decimal.TryParse(textBox.Text, NumberStyles.AllowDecimalPoint, formatWithComma, out decimalValue))
        {
            //error here
            return;
        }
    }

    con.Open();
    SqlCommand cmd = new SqlCommand("Insert into inventory (price) values (@price);", con);
    var priceParameter = cmd.Parameters.Add("@price", SqlDbType.Decimal);
    priceParameter.Precision = 18;
    priceParameter.Scale = 2;
    priceParameter.Value = decimalValue;
    cmd.ExecuteNonQuery();
    con.Close();
C #, SQL-сервер, SQL-сервер-2008,
Похожие вопросы