好的,所以第一个问题是连接字符串本身,它有这个我不理解的异常,所以我试图把它放在一个 try catch 语法中,但当我把它插入公共部分类 Form1 : 形式括号正在起作用,所以我把它插入到一个函数中,现在功能有这个错误:
严重性代码说明项目文件行抑制状态 错误 CS0161"Form1.connection()":并非所有代码路径都返回值 餐厅管理系统 C:\用户\管理员\源\存储库\餐厅管理系统\餐厅管理系统\表单 1.cs 36 活动
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Restaurant_Management_System
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
panel1.BackColor = Color.FromArgb(50, Color.Black);
label1.BackColor = Color.FromArgb(30, Color.Beige);
label2.BackColor = Color.FromArgb(0, Color.Black);
Password.BackColor = Color.FromArgb(0, Color.Black);
}
SqlCommand cmd;
SqlDataReader dr;
public SqlConnection connection()
{
try
{
SqlConnection con = new SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename= "|Data Directory|\Coffee(LoginEmployee).mdf";Integrated Security=True;");
}
catch (Exception ex)
{
MessageBox.Show("Error message: COULD NOT CONNECT STRING: " + ex);
}
}
private string getUsername()
{
SqlConnection con = connection();
cmd = new SqlCommand("SELECT nalue FROM EmployeeLog where Property=Username", con);
dr = cmd.ExecuteReader();
dr.Read();
return dr[0].ToString();
}
private string getPassword()
{
SqlConnection con = connection();
cmd = new SqlCommand("SELECT nalue FROM EmployeeLog where Property=Password", con);
dr = cmd.ExecuteReader();
dr.Read();
return dr[0].ToString();
}
我需要更换什么? 为什么不是全部返回一个值? 如果我使用 void 情况,它也会出现此错误,我无法将其显式转换为 SQLconnection。 这是在最新的Visual Studio 2017中制作的
如果捕获异常,则不会返回任何 SqlConnection。因此,您可以在显示消息框后返回 null。
然后,当然,您需要在调用 connection() 后进行空检查,这样您就不会在尝试使用它时遇到空引用异常。
您还需要返回正在创建的连接:
return new SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Data Directory|Coffee(LoginEmployee).mdf;Integrated Security=True;");
注意:我也不建议对连接字符串进行硬编码!您通常会将连接字符串添加到 app.config/web.config 并使用 ConfigurationManager.ConnectionStrings... 读取它 - 这是因为您可能在不同的计算机上具有不同的实例名称,或者您可能希望指向服务器上的数据库而不是本地数据库。您无需更改代码并重新编译即可使其在多台计算机上工作。
在 microsoft 的类库站点 (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.attachdbfilename(v=vs.110).aspx) 上有一条信息说:An error will be generated if a log file exists in the same directory as the data file and the 'database' keyword is used when attaching the primary data file. In this case, remove the log file. Once the database is attached, a new log file will be automatically generated based on the physical path.