lev*_*y92 2 c# sql sql-server-2008
我有一个包含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;
}
Run Code Online (Sandbox Code Playgroud)
它给人的错误,当我试图进入该输入http://rss.feedsportal.com/c/32727/f/510887/s/1da50441/l/0Lekonomi0Bmilliyet0N0Btr0Cenflasyon0Eyuzde0E50Ee0Einene0Ekadar0Esikacak0E0Cekonomi0Cekonomidetay0C210B0A30B20A120C15181930Cdefault0Bhtm/story01.htm到"链接栏",它给错误,是'e'附近的语法不正确.以'Lekonomi0Bmilliyet0N0Btr0Cenflasyon0Eyuzde0E50Ee0Einene0Ekadar0Esikacak0E0Cekonomi0Cekonomidetay0C210B0A30B20A120C15181930Cdefau'开头的标识符太长.最大长度为128.字符串')'后面的未闭合引号.
另外,在sql端,这个列是varchar(455)
Mic*_*eld 12
错误是说标识符名称太长; 这与未闭合的引号错误相结合意味着你可能错过了一个开头的报价.也就是说,你有这个:
INSERT INTO Foo ( A ) VALUES ( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Run Code Online (Sandbox Code Playgroud)
代替
INSERT INTO Foo ( A ) VALUES ( 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Run Code Online (Sandbox Code Playgroud)
您不应该通过字符串连接来构建查询; 这是其中一个原因.参数化查询将获得适合您的报价.(注意:您不需要使用存储过程来使用参数化查询.)
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;
Run Code Online (Sandbox Code Playgroud)
等等
小智 8
您还可以在'sql'字符串之前添加SET QUOTED_IDENTIFIER OFF并在'sql'之后添加SET QUOTED_IDENTIFIER
QUOTED IDENTIFIER ON/OFF:指定双引号的使用设置.如果启用此选项,则双引号将用作SQL Server标识符(对象名称)的一部分.这在标识符也是SQL Server保留字的情况下非常有用.
sql = "SET QUOTED_IDENTIFIER OFF " + sql + " SET QUOTED_IDENTIFIER OFF ";
SqlCommand cmd = new SqlCommand(sql, Connect());
cmd.ExecuteNonQuery();
res = true;
Run Code Online (Sandbox Code Playgroud)
在这种情况下你应该使用它.