如何在c#中创建返回datatable的类
本文关键字:返回 datatable 的类 创建 | 更新日期: 2023-09-27 18:02:08
我创建了一个类,返回一个dataTable,但它显示一个错误
错误1 ' demo_c_sharp . cls_connection。GetApprovedData(ref string)':并非所有代码路径返回值D:'Vivek'demoproject'demo C Sharp'demo C Sharp'class files' cls_connection .cs 45 26 demo C Sharp
我创建了如下方法:
public DataTable GetApprovedData(ref string tablename)
{
try
{
if (cnn.State==System.Data.ConnectionState.Closed)
{
dtTbl = new DataTable();
cnn.Open();
cmd = new SqlCommand("USP_Billing_GetApprovedData", cnn);
cmd.CommandTimeout = 5000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ProcessName", tablename);
da = new SqlDataAdapter(cmd);
da.Fill(dtTbl);
return dtTbl;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
所有部件必须返回一个值。看到
您只返回if
部分,如果if
部分不工作怎么办?所以你还需要一个额外的变量,它可能在方法的末尾。
public DataTable GetApprovedData(ref string tablename)
{
dtTbl = new DataTable();
try
{
if (cnn.State==System.Data.ConnectionState.Closed)
{
cnn.Open();
cmd = new SqlCommand("USP_Billing_GetApprovedData", cnn);
cmd.CommandTimeout = 5000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ProcessName", tablename);
da = new SqlDataAdapter(cmd);
da.Fill(dtTbl);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cnn.Close();
}
return dtTbl;
}
必须从方法返回一些东西,否则抛出异常。目前在你的catch
块,你正在显示一个消息,但然后什么也不做。您正在吞下异常,因此代码期望能够继续,但是您没有告诉它从方法返回什么,这是不允许的。
还有一个类似的问题,返回语句也在"if"块中。那么,当"if"的条件不满足时,代码去了哪里?没有,这意味着它也不知道返回什么。
我建议您将ddb1的声明和返回语句移到try
块之外。或者,在catch
块中返回一个空的DataTable对象,如果适合您的情况,甚至返回null,并且在if
之后的额外else
中也是如此。
你的返回路径在try块中,它可能在任何时候失败,而不是到达返回语句。
你需要确保你总是击中return语句,即使你捕获了一个异常。
您的问题不在于您命名的类,而在于方法。无论如何,这在这里不是一个大问题。
此外,作为一个错误提示,您必须始终返回一些东西(应该是null
或DataTable
的空实例)。
在这里它抱怨,因为在连接没有关闭的情况下,该方法根本不返回任何东西。这就是问题所在。
您的解决方案应该是这样的,您应该添加一个代码来处理if
语句的其余情况。