C#连接SQL Server插入数据报错:Incorrect syntax near ')' 求助
问题分析与解决方案
错误原因
你遇到的Incorrect syntax near ')'错误,是字符串拼接SQL语句导致的语法异常:
- 如果
newLogin/newPassword包含单引号(如O'Neil),拼接后会直接破坏SQL语法结构; - 如果
newAdminAccess未正确赋值(比如为null),会生成类似, )的错误片段,触发括号附近的语法错误; - 这种写法还存在严重的SQL注入风险,属于高危代码写法。
修复代码(参数化查询)
替换字符串拼接逻辑,使用SQL参数化查询,从根源解决语法问题和安全风险:
// 使用参数化查询,避免字符串拼接的语法错误和注入风险 sqlQuery = "INSERT INTO [dbo].[Guardians] ([Login], [Password], [AdminAccess]) VALUES (@Login, @Password, @AdminAccess)"; cmd = new SqlCommand(sqlQuery, sqlConnection); // 添加参数并指定类型,匹配数据库字段类型 cmd.Parameters.Add("@Login", SqlDbType.NVarChar).Value = newLogin; cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value = newPassword; cmd.Parameters.Add("@AdminAccess", SqlDbType.Bit).Value = newAdminAccess; if (cmd.ExecuteNonQuery() == 1) { listener.Send(Encoding.UTF8.GetBytes("Success")); } else { listener.Send(Encoding.UTF8.GetBytes("Failure")); }
额外提示
- 永远不要用字符串拼接生成SQL语句,这是.NET操作SQL数据库的基本规范;
- 建议为
Password字段添加加密逻辑(如哈希存储),明文存储密码属于严重安全漏洞; - 可以用
cmd.Parameters.AddWithValue简化写法,但显式指定SqlDbType能避免类型转换异常,更推荐使用。
内容的提问来源于stack exchange,提问作者Lucifer
相关产品推荐
相关产品推荐

