Неверный синтаксис рядом с ','. ошибка - PullRequest
0 голосов
/ 19 октября 2011

Я получаю ошибку SQL при попытке сделать это:

    public static int GetOrderId(decimal totalprice, int userid)
    {
        string s = "SELECT * from orders where OrderUserId = " + userid + " and OrderTotalPrice = " + totalprice;
        cmd = new SqlCommand(s, con);
        int temporderid = Convert.ToInt32(cmd.ExecuteScalar());

        return temporderid;
    }

Насколько я вижу, потому что он возвращает OrderTotalPrice, формат несовместим. Но я не могу понять, как получить его в совместимом формате.

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Вероятно, это форматирование totalprice с запятой, например 3,14, где SQL Server ожидает точку, например 3.14.

Один из способов исправить это - указать InvariantCulture, который используетточка:

var s = string.Format(
    CultureInfo.InvariantCulture, 
    "SELECT * from orders where OrderUserId = {0} and OrderTotalPrice = {0:0.0}",
    42, 3.1415);

Форматирует цену как 3.1 на любом компьютере.

Кстати, гораздо лучше передавать переменные в качестве параметров:

var com = new SqlCommand();
com.CommandType = CommandType.Text;
com.CommandText = "SELECT * from orders where OrderUserId = @userid " +
    "and OrderTotalPrice = @totalprice";
com.Parameters.AddWithValue("@userid", 42);
com.Parameters.AddWithValue("@totalprice", 3.1415);
var temporderid = com.ExecuteScalar();

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

0 голосов
/ 19 октября 2011

Я думаю, это потому, что totalprice преобразуется во что-то вроде 12,35, когда вы объединяете запрос.

Поэтому я бы посоветовал вам использовать параметризованный запрос.Например, вот так:

var s = "SELECT * from orders " +
    " where OrderUserId = @userid and OrderTotalPrice = @totalprice";
var cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("userid", userid);
cmd.Parameters.AddWithValue("totalprice", totalprice);

int temporderid = Convert.ToInt32(cmd.ExecuteScalar());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...