我对下面的代码有疑问,我试图从通用查询中获取下拉值,传递字段和表名。我收到错误无法分配给GetDropDownValues,因为它是一个方法组,不知道如何解决?任何人都能解释一下吗?提前谢谢......
public static DataTable GetDropDownValues(string pstrConString_Mfg, string pstrTableName, string pstrFieldName, string pstrField = "")
{
string strSQL;
DataTable dtRetTable;
try
{
strSQL = "SELECT DISTINCT " + pstrFieldName;
if (pstrField != "")
{
strSQL = strSQL + " , " + pstrField;
}
strSQL = strSQL + " FROM " + pstrTableName + " ORDER BY " + pstrFieldName;
dtRetTable = ExecuteDataTable(pstrConString_Mfg, CommandType.Text, strSQL);
if (dtRetTable != null)
{
if ((dtRetTable.Rows.Count == 0))
{
GetDropDownValues = new DataTable(); <--error
}
else
{
dtRetTable.BeginLoadData();
dtRetTable.Rows.InsertAt(dtRetTable.NewRow, 0);
dtRetTable.EndLoadData();
dtRetTable.AcceptChanges();
GetDropDownValues = dtRetTable;
}
}
else
{
GetDropDownValues = new DataTable();
}
}
catch (Exception ex)
{
throw ex;
}
}
- ============================================= =====
我也在线上'dtRetTable.Rows.InsertAt(dtRetTable.NewRow,0);' 无法从'方法组'转换为'DataRow'。我假设它与上述错误有关?
答案 0 :(得分:1)
你写的GetDropDownValues = dtRetTable;
和GetDropDownValues = new DataTable();
看起来像旧的Visual Basic(也是Visual Basic for Applications,VBA)语法,让函数返回一个值。
使用C#(以及C,C ++,Java,JavaScript和许多其他人),您需要return
一个值,而不是将其分配给函数名。
请改为:
return dtRetTable;
和
new DataTable();
编辑以解决您的其他问题...
对于{@ 1}}行上的错误,正如@Ed所说,Plunkett建议将解决此问题。正如您所说,您正在将旧代码转换为使用C#工作,很容易忘记根据C#的要求添加尾部括号dtRetTable.Rows.InsertAt(dtRetTable.NewRow, 0)
但是您得到()
的错误消息 - 嗯,我&# 39;当我忘记把括号括进来时,我才见过它,所以你会更容易理解发生了什么。
最后,除非你打算在那里做一些关于异常的事情,否则不要捕获异常。您应始终在Interface方法中捕获Exception,以便向用户显示更好的消息并防止应用程序崩溃。
你写method group
的地方,最好只写throw ex;
或者你愿意,完全删除try / catch块。当您throw
时,您将销毁正确的 StackTrace ,这对于调试和确定问题是至关重要的。在StackOverflow以及Web的其余部分中,有很多信息(以及更多深入的信息)。
快乐翻译,记住我们喜欢帮助那些试图先帮助自己的人。