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
相关产品推荐
相关产品推荐

