如何在sql查询中解决最大长度误差(它太长了)c#
我有一个包含sql语句的方法。它是如何在sql查询中解决最大长度误差(它太长了)c#
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)
该错误是说,标识符名称太长;这与未封闭的引号错误相结合意味着您可能错过了开盘报价。也就是说,你有这样的:
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;
等
第三个参数只对类型具有可变长度需要,比如varchar,并且它仅对查询解析器提示您的字符串有多大(例如参数可以更小* *它会很好;它的参数是*更大*你可能会得到截断错误)。通常你让它们匹配字段定义。对于int,日期等,可以将第三个参数保留;我会放一个日期参数给你看。 – 2012-03-21 16:51:38
你也可以关闭之前后“SQL”字符串和SET QUOTED_IDENTIFIER添加SET QUOTED_IDENTIFIER“ 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;
你应该在这种情况下使用它。
它帮助。日Thnx。 – Kings 2013-05-14 09:48:33
你的数据库是如何定义的? – 2012-03-21 13:50:43
我愿意赌钱'RSS_title'包含一个'''字符,请确保您将它们转义('RSS_title.Replace(“'”,“''”)')。你当然应该使用参数化查询,但是现在可以在10秒内修复。 – Blindy 2012-03-21 14:01:38
@Bindindy为什么推荐10秒修复而不是正确的修复? – dmck 2012-03-21 14:03:03