You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLConnection字符串报错:Keyword not supported,求排查代码问题

排查「Keyword not supported on sqlconnection string query」错误

首先直接点明核心问题:你在CanNavigate方法里把连接字符串和SQL查询语句搞混了,这就是触发报错的根本原因!

错误原因拆解

看这段出问题的代码:

using (var con = new SqlConnection(query.ToString())) { 
    using (var cmd = new SqlCommand(str, con)) {
  • SqlConnection的构造函数需要传入数据库连接字符串,但你错误地传入了SQL查询语句query
  • SqlCommand的构造函数第一个参数应该是SQL查询语句,但你却传了连接字符串str
    系统把查询语句当成连接字符串去解析,自然会报错“不支持的关键字”——毕竟SELECT、FROM这类SQL关键字完全不是连接字符串的合法配置项。

修正后的CanNavigate方法

public static bool CanNavigate(string user) {
    bool result = false;
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    string query = "SELECT tblRole.Navigate FROM tblRole INNER JOIN tblUser ON tblRole.RoleID = tblUser.RoleID WHERE tblUser.Username = @Username";
    
    using (var con = new SqlConnection(connectionString)) {
        using (var cmd = new SqlCommand(query, con)) {
            cmd.Parameters.AddWithValue("@Username", user);
            con.Open();
            // 处理查询无结果的情况,避免强制转换抛出异常
            var scalarResult = cmd.ExecuteScalar();
            result = scalarResult != DBNull.Value ? (bool)scalarResult : false;
        }
    }
    return result;
}

额外的潜在问题提醒

  • ActiveButtons方法的参数冗余:你定义了string user参数,但方法内部直接调用Extensions.UserInfo.CurrentLoggedUser,参数完全没用到。如果CurrentLoggedUser是全局可用的,建议删除这个冗余参数;如果需要支持传入特定用户,就把方法里的CurrentLoggedUser替换成参数user。
  • 按钮逻辑简化:原代码遍历所有按钮设置可见性,其实可以只定位到目标按钮处理:
    var novoBtn = Buttons.FirstOrDefault(b => b.Name == "novoToolStripMenuItem");
    if(novoBtn != null) novoBtn.Visible = false;
    // 其他按钮默认显示的话,无需逐个设置
    

内容的提问来源于stack exchange,提问作者Carlos Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:36