当我想阅读表时,我收到此错误:
System.Data.SqlClient.SqlException(0x80131904):','附近的语法不正确。 在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) 在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose) 在System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean& dataReady) 在System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 在System.Data.SqlClient.SqlDataReader.get_MetaData() 在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString) 在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task& task,Boolean asyncWrite,SqlDataReader ds,Boolean describeParameterEncryptionRequest) 在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,TaskCompletionSource`1完成,Int32超时,任务和任务,布尔asyncWrite) 在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method) 在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method) 在System.Data.SqlClient.SqlCommand.ExecuteReader() 在hamsohbat.Form1.showFriends(更新更新)中的C:\ Users \ Soroush \ documents \ visual studio 2015 \ Projects \ hamsohbat \ hamsohbat \ Form1.cs:第327行 at hamsohbat.Form1.GetUpdates(Int64 ii,Int32 offset)在C:\ Users \ Soroush \ documents \ visual studio 2015 \ Projects \ hamsohbat \ hamsohbat \ Form1.cs:第113行 ClientConnectionId:02ad4c40-e0e7-47ac-91cc-ad88bcdf057d 错误号码:102,状态:1,等级:15
我的代码的相关部分是:
using (SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;AttachDbFilename=" + Directory.GetCurrentDirectory() + @"\MembersDB.mdf;Integrated Security=True;User Instance=True"))
{
foreach (Int32 x in matches)
{
con.Open();
using (SqlCommand cmd = new SqlCommand("SELECT ([UserName], [FName], [LName], [NickName]) FROM [Table] WHERE [TelegramId]=" + x.ToString(), con))
using (SqlDataReader reader = cmd.ExecuteReader())
while (reader.Read())
bot.SendTextMessage(update.Message.Chat.Id, "Nick: " + reader["NickName"].ToString() + "\nFirst Name: " + reader["FName"].ToString() + "\nLast Name: " + reader["LName"].ToString() + "\nTelegram ID: @" + reader["UserName"].ToString());
}
}
我在代码行之间添加了一些sendmessages来跟踪它,我认为问题在于这一行(也许我错了):
using (SqlCommand cmd = new SqlCommand("SELECT ([UserName], [FName], [LName], [NickName]) FROM [Table] WHERE [TelegramId]=" + x.ToString(), con))
我的表的列是Id,TelegramId,用户名,FName,LName,昵称
感谢您的关注
答案 0 :(得分:3)
您不必将大括号( )
放在列名的开头和结尾,这可能是您的查询语法错误的原因,您应该首先尝试在sql server中运行查询,如果它运行正常,然后在代码库中移植它,通过删除不必要的大括号来更改您的查询:
SELECT [UserName], [FName], [LName], [NickName] FROM [Table]
并且您不应该以正确的方式在查询中进行字符串连接,您需要使用参数化查询来防止SQL注入攻击。
有关如何编写参数化查询的信息,请参阅以下文章:
或此链接也有帮助:
http://csharp-station.com/Tutorial/AdoDotNet/Lesson06
希望它有所帮助。
答案 1 :(得分:1)
您只需要在SELECT查询中删除“(”和“)”。我希望它对你有用。
using (SqlCommand cmd = new SqlCommand("SELECT [UserName], [FName], [LName], [NickName] FROM [Table] WHERE [TelegramId]=" + x.ToString(), con))
答案 2 :(得分:1)
看起来你在select语句中使用括号是错误的:
SELECT ([UserName], [FName], [LName], [NickName]) FROM [Table] WHERE [TelegramId]=1
应该是:
SELECT [UserName], [FName], [LName], [NickName] FROM [Table] WHERE [TelegramId]=1
(在 [UserName] 之前和 [NickName] 之后没有括号)。
使用括号,数据库将尝试将括号中的术语解释为单个术语,因此会抱怨意外的逗号。
答案 3 :(得分:0)
YESSS 我删除了大括号,它有效。谢谢朋友们
我将我的代码行更改为:
using (SqlCommand cmd = new SqlCommand("SELECT ([UserName], [FName], [LName], [NickName]) FROM [Table] WHERE [TelegramId]=" + x.ToString(), con))
并且有效
答案 4 :(得分:0)
更改此行
使用(SqlCommand cmd = new SqlCommand(" SELECT([UserName],[FName], [LName],[NickName])FROM [表] WHERE [TelegramId] =" + x.ToString(), CON))
进入这个
使用(SqlCommand cmd = new SqlCommand(" SELECT [UserName],[FName], [LName],[NickName] FROM [Table] WHERE [TelegramId] =" + x.ToString(), CON))