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

C#餐厅系统登录切换窗体时遇ConnectionString未初始化错误

问题分析与解决

错误System.InvalidOperationException: 'The ConnectionString property has not been initialized.'的核心原因是你创建的SqlConnection对象未设置数据库连接字符串,调用con.Open()时无法建立数据库连接。

修复步骤:

  • 方式1:创建SqlConnection时直接传入连接字符串
    实例化SqlConnection时,将你的数据库连接字符串作为参数传入:

    SqlConnection con = new SqlConnection("Data Source=你的服务器地址;Initial Catalog=你的数据库名;Integrated Security=True;");
    
  • 方式2:先实例化再赋值ConnectionString属性
    若需后续调整连接字符串,可先创建对象再设置属性:

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=你的服务器地址;Initial Catalog=你的数据库名;Integrated Security=True;";
    

优化后的完整代码(推荐使用using自动释放资源):

public bool personelEntryControl(int UserId, string password)
{
    bool result = false;
    // 替换为你的实际数据库连接字符串
    string connectionString = "Data Source=你的服务器地址;Initial Catalog=你的数据库名;Integrated Security=True;";

    using (SqlConnection con = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("Select * from PERSONELLER where ID=@Id and PAROLA=@password", con))
    {
        cmd.Parameters.Add("@Id", SqlDbType.Int).Value = UserId; // UserId是int类型,参数类型对应Int更准确
        cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = password;

        try
        {
            con.Open();
            // 判断是否存在匹配的记录
            result = cmd.ExecuteScalar() != null;
        }
        catch (SqlException ex)
        {
            string hata = ex.Message;
            throw;
        }
    }

    return result;
}

额外提示:

  • 避免硬编码连接字符串,建议将其放在app.config(Windows Forms项目)中,通过ConfigurationManager.ConnectionStrings读取,方便后续修改:
    <!-- app.config中的配置 -->
    <connectionStrings>
      <add name="RestaurantDB" connectionString="Data Source=你的服务器地址;Initial Catalog=你的数据库名;Integrated Security=True;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    
    代码中读取方式:
    string connectionString = ConfigurationManager.ConnectionStrings["RestaurantDB"].ConnectionString;
    
  • 注意参数类型匹配:原代码中UserId为int类型,却使用SqlDbType.VarChar参数类型,会导致不必要的类型转换,建议改为SqlDbType.Int。

内容的提问来源于stack exchange,提问作者koray.gnsl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:10:07