如何解决sql查询c#中的最大长度错误(太长)

本文关键字:太长 错误 何解决 解决 sql 查询 | 更新日期: 2023-09-27 18:28:26

我有一个包含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"附近的语法不正确。以"Lekonomi0Milliyeet0NTr0Cenflasyon0Eyuzde0E50Ee0Einene0Ekadar0Esikacak0E0Cekonomi0Cekonomidetay0C210B0A30B20A120C15181930Cdefau"开头的标识符太长。最大长度为128。字符串")"后未闭合的引号。

此外,在sql端,这个列是varchar(455)

如何解决sql查询c#中的最大长度错误(太长)

错误表示标识符名称太长;再加上未闭合的引号错误,意味着您可能错过了一个期初引号。也就是说,你有这个:

INSERT INTO Foo ( A ) VALUES ( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')

而不是

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

您不应该通过字符串连接来构建查询;这就是原因之一。参数化查询将为您提供正确的报价。(注意:使用参数化查询不需要使用存储的proc。)

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;

等等。

您还可以在'sql'字符串之前添加SET QUOTED_IDENTIFIER OFF,在'sql'之后添加SET QUITED_IDENTIFIER On

带引号的标识符开/关:这指定了使用双引号的设置。如果启用此选项,则使用双引号作为SQLServer标识符(对象名称)的一部分。这在标识符也是SQL Server保留字的情况下非常有用。

sql = "SET QUOTED_IDENTIFIER OFF " + sql + " SET QUOTED_IDENTIFIER OFF ";
SqlCommand cmd = new SqlCommand(sql, Connect());
cmd.ExecuteNonQuery();
res = true;

在这种情况下你应该使用这个。