【发布时间】:2014-07-15 17:08:18
【问题描述】:
我在一个解决方案中有此代码,它工作正常:
private readonly List<Department> departments = new List<Department>();
. . .
private void LoadDepartments(string serialNum)
{
string dbContext = HandheldServerUtils.GetDBContextForSerialNum(serialNum);
string connStr =
string.Format(
@"Provider=Microsoft.ACE.OLEDB.12.0;User ID=NRBQSP;Password=NRBQSP;Data Source=C:\CCRWin\DATA\CCRDAT{0}.MDB;Jet OLEDB:System database=C:\CCRWin\Data\sscs.mdw",
dbContext);
using (var conn = new OleDbConnection(connStr))
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
@"SELECT t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name
FROM t_accounts
INNER JOIN td_department_accounts ON (t_accounts.account_no =
td_department_accounts.account_no) where type = 'DE'";
cmd.CommandType = CommandType.Text;
conn.Open();
int i = 1;
using (OleDbDataReader oleDbD8aReader = cmd.ExecuteReader())
{
while (oleDbD8aReader != null && oleDbD8aReader.Read())
{
string accountNum = oleDbD8aReader.GetString(0);
string deptName = oleDbD8aReader.GetString(1);
Add(new Department {Id = i, AccountId = accountNum, Name = deptName});
i++;
}
}
}
}
}
我在另一个代码中有非常相似的代码:
public IEnumerable<Department> GetDepartments()
{
private readonly List<Department> departments = new List<Department>();
string dbContext = "42";
string connStr =
string.Format(
@"Provider=Microsoft.ACE.OLEDB.12.0;User ID=NRBQSP;Password=NRBQSP;Data Source=C:\CCRWin\DATA\CCRDAT{0}.MDB;Jet OLEDB:System database=C:\CCRWin\Data\sscs.mdw",
dbContext);
using (var conn = new OleDbConnection(connStr))
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
@"SELECT t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name
FROM t_accounts
INNER JOIN td_department_accounts ON (t_accounts.account_no = td_department_accounts.account_no) where type = 'DE'";
cmd.CommandType = CommandType.Text;
conn.Open();
int i = 1;
using (OleDbDataReader oleDbD8aReader = cmd.ExecuteReader())
{
while (oleDbD8aReader != null && oleDbD8aReader.Read())
{
string accountNum = oleDbD8aReader.GetString(0);
string deptName = oleDbD8aReader.GetString(1);
departments.Add(new Department { Id = i, AccountId = oleDbD8aReader.GetInt16(0), Name = oleDbD8aReader.GetString(1) });
i++;
}
}
}
}
return departments;
}
...它咳出 26 个错误,例如:
";预期"
在这条线和其他线上:
using (var conn = new OleDbConnection(connStr))
-and "} expected" 就在开头的 "{"
--and “命名空间不能直接包含字段或方法等成员”
在这一行:
departments.Add(new Department { Id = i, AccountId = oleDbD8aReader.GetInt16(0), Name = oleDbD8aReader.GetString(1) });
-以及“类、结构或接口成员声明中的无效标记 '!='”:
while (oleDbD8aReader != null && oleDbD8aReader.Read())
...以及“(”和“,”和“;”和“{”和“=”和“使用”的许多其他“无效令牌”错误
-和两个“类型或命名空间定义,或预期的文件结尾”
如果我注释掉除 return 语句之外的所有代码,那么它就是:
public IEnumerable<Department> GetDepartments()
{
return null;
}
...它编译得很好。
为什么这里对鹅好对鹅不好?
【问题讨论】:
-
所以你说你在一个项目中尝试了一些代码,然后你在另一个项目中尝试了 不同 代码,你想知道为什么后者没有编译?你的逻辑有问题。
-
看起来您在某处忘记了
}或{。没有完整的代码很难指出。 -
在第二种情况下,您的方法中有一个
private变量。这是非法的。 -
@derpirscher:这是完整的代码。
-
@B.ClayShannon 我对此表示怀疑。既没有类也没有命名空间定义。
标签: c# ienumerable oledbconnection oledbcommand oledbdatareader