C# C中类方法返回值的困惑#
我试图在C#中构建一个数据库构造函数(factory?),但是我对如何在“所有路径都返回一个值”的情况下管理错误感到困惑 例如,下面是一个我想用来返回数据库连接的类:C# C中类方法返回值的困惑#,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我试图在C#中构建一个数据库构造函数(factory?),但是我对如何在“所有路径都返回一个值”的情况下管理错误感到困惑 例如,下面是一个我想用来返回数据库连接的类: public class DB { static SqlConnection Connect() { SqlConnection thisConnection; try { thisConnection = new SqlConnection(connec
public class DB
{
static SqlConnection Connect()
{
SqlConnection thisConnection;
try {
thisConnection = new SqlConnection(connectionString);
}
catch (SqlException e) { Console.WriteLine(e.Message); }
return thisConnection;
}
}
显然,这是行不通的,因为“并非所有路径都返回值”
当方法实际返回值时,如何使用try/catch?显然,我不是一个程序员大师;)但我正在处理它。您可以从catch语句中返回
null
或重新抛出异常但是使用静态连接并不是一个好主意。数据库连接规则应为“尽可能晚地打开,尽可能早地关闭”
您应该将您的连接封装在其中,以确保在使用块结束时对其进行处理(关闭)
using(SqlConnection connection = new SqlConnection(connectionString))
{
//execute your command etc.
}
您可以从catch语句返回
null
或重新抛出异常但是使用静态连接并不是一个好主意。数据库连接规则应为“尽可能晚地打开,尽可能早地关闭”
您应该将您的连接封装在其中,以确保在使用块结束时对其进行处理(关闭)
using(SqlConnection connection = new SqlConnection(connectionString))
{
//execute your command etc.
}
例如,总是返回一些内容
public bool yesno()
{
bool mybool = false;
try
{
mybool = true;
}
catch
{
mybool = false;
}
return mybool;
}
例如,总是返回一些内容
public bool yesno()
{
bool mybool = false;
try
{
mybool = true;
}
catch
{
mybool = false;
}
return mybool;
}
如果您无法用给定的连接字符串实例化对象,我将设置thisConnection=null,然后返回它。然后在调用此函数后检查null,如
If (DB.Connect("ConnectionString") != null) {
//Connection successful
}
else {
//Failed
}
public class DB
{
Static SqlConnection Connect(string connectionString)
{
SqlConnection thisConnection = null;
try {
thisConnection = new SqlConnection(connectionString);
}
catch (SqlException e) { Console.WriteLine(e.Message); }
return thisConnection;
}
}如果无法使用给定的连接字符串实例化对象,我会将thisConnection设置为null,然后返回它。然后在调用此函数后检查null,如
If (DB.Connect("ConnectionString") != null) {
//Connection successful
}
else {
//Failed
}
public class DB
{
Static SqlConnection Connect(string connectionString)
{
SqlConnection thisConnection = null;
try {
thisConnection = new SqlConnection(connectionString);
}
catch (SqlException e) { Console.WriteLine(e.Message); }
return thisConnection;
}
}确定连接尝试失败时要执行的操作,并在catch块中执行此操作。可能是rethrow exception,或return null,或其他您要捕获异常的内容,请在catch块中重新捕获它或返回null。如果您没有具体计划说明方法如何成功完成其任务,请不要捕获此级别的异常。听起来你好像没有这样的计划,所以不要抓住这里的例外。对于日志记录/通知等,只需在可能的最高级别注册一个异常处理程序。确定连接尝试失败时要执行的操作,并在catch块中执行。可能是rethrow exception,或return null,或其他您要捕获异常的内容,请在catch块中重新捕获它或返回null。如果您没有具体计划说明方法如何成功完成其任务,请不要捕获此级别的异常。听起来你好像没有这样的计划,所以不要抓住这里的例外。对于日志记录/通知等,只需在可能的最高级别注册一个异常处理程序。这不像他保持静态连接一段时间,他只是创建了一个静态工厂方法来处理构造和一些额外的错误处理。很有趣,谢谢你。我仍在学习C#(来自更多基于脚本的语言,如python和PHP)。非常不同的方法,但我肯定已经更喜欢了。我想。也许……他并不是暂时保持静态连接,他只是创建了一个静态工厂方法来处理构造,并附加了一些错误处理。很有趣,谢谢你。我仍在学习C#(来自更多基于脚本的语言,如python和PHP)。非常不同的方法,但我肯定已经更喜欢了。我想。大概