Как решить максимальную длину ошибки (это слишком долго) в SQL-запрос c # - PullRequest
2 голосов
/ 21 марта 2012

У меня есть метод, который включает в себя заявление SQL.это

    public Boolean addRSS(string RSS_title, string Description, DateTime datetime, string RSS_Link, string user_name, float rate)
    {


        // Console.WriteLine(MyString.Remove(5, 10));
       // string a = date.ToString().Replace('.', '-');
        Boolean res = false;
        string sql = "INSERT INTO My_RSS ( RSS_Title,RSS_Description,RSS_Date,RSS_Link,RSS_Rate,UserName) values('" 
            +
            RSS_title + "','" +
            "FFFFFFFFFFFFFFFFFFFFFFFFFAAASDASDASDASD" +
            "', SYSUTCDATETIME(),'" +
            RSS_Link + "'," +
            rate + ",'"+
            user_name +  
            "')";
        try


        {


            // hasan = hasan.Insert(c, hasan);

            SqlCommand cmd = new SqlCommand(sql, Connect());
            cmd.ExecuteNonQuery();
            res = true;
        }
        catch (Exception)
        {
            res = false;
        }

        return res;

    }

Выдает ошибку, когда я пытаюсь ввести этот ввод http://rss.feedsportal.com/c/32727/f/510887/s/1da50441/l/0Lekonomi0Bmilliyet0N0Btr0Cenflasyon0Eyuzde0E50Ee0Einene0Ekadar0Esikacak0E0Cekonomi0Cekonomidetay0C210B0A30B20A120C15181930Cdefault0Bhtm/story01.htm в "столбец ссылки", и выдает ошибку, которая является неправильным синтаксисом рядом с 'e'.Идентификатор, который начинается с 'Lekonomi0Bmilliyet0N0Btr0Cenflasyon0Eyuzde0E50Ee0Einene0Ekadar0Esikacak0E0Cekonomi0Cekonomidetay0C210B0A30B20A120C15181930Cdefau', слишком длинный.Максимальная длина 128. Незакрытая кавычка после символьной строки ')'.

Кроме того, на стороне sql этот столбец varchar (455)

Ответы [ 2 ]

12 голосов
/ 21 марта 2012

Ошибка говорит о том, что имя идентификатор слишком длинное;это в сочетании с нераскрытой ошибкой в ​​кавычках означает, что вы, вероятно, пропустили начальную цитату.То есть у вас есть это:

INSERT INTO Foo ( A ) VALUES ( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')

вместо

INSERT INTO Foo ( A ) VALUES ( 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')

Вы не должны строить свои запросы с помощью конкатенации строк;это одна из причин.Параметризованные запросы подберут правильное цитирование.(Примечание: вам не нужно использовать сохраненные процедуры для использования параметризованных запросов.)

var sql = "INSERT INTO My_RSS ( Title, Description, Date, Link, Rate, Name )
           VALUES ( @Title, @Desc, @PostDate, @Link, @Rate, @Name )";

SqlCommand cmd = new SqlCommand(sql, Connect());
cmd.Parameters.Add("@Title", SqlDbType.VarChar, 100).Value = RSS_title;
cmd.Parameters.Add("@Desc", SqlDbType.VarChar, 8192).Value = RSS_description;
cmd.Parameters.Add("@PostDate", SqlDbType.SmallDateTime).Value = DateTime.Now;
cmd.Parameters.Add("@Rate", SqlDbType.Int).Value = rate;

и т. Д.

8 голосов
/ 14 мая 2013

Вы также можете добавить SET QUOTED_IDENTIFIER OFF перед строкой 'sql' и SET QUOTED_IDENTIFIER On после 'sql'

ЗАДАННЫЙ ИДЕНТИФИКАТОР ВКЛ / ВЫКЛ: Это определяет настройку для использования двойной кавычки. Если это включено, двойная кавычка используется как часть идентификатора SQL Server (имя объекта). Это может быть полезно в ситуациях, когда идентификаторы также являются зарезервированными словами SQL Server.

sql = "SET QUOTED_IDENTIFIER OFF " + sql + " SET QUOTED_IDENTIFIER OFF ";

SqlCommand cmd = new SqlCommand(sql, Connect());
cmd.ExecuteNonQuery();
res = true;

Вы должны использовать это в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...