我正在使用ODBC连接从Windows 7上的Unity3D环境(Mono.net)中的Access文件(.mdb)中获取数据,并且连接,断开连接和请求均无任何错误。

但是,当我读取所获得的数据时,我只会从数据库中收到数字。它可以是整数或浮点数。但是,当我尝试获取一个字符串时,它总是返回一个空字符串。

这是我在DataBaseHandler类中用于执行请求(提取)的内容:

public ArrayList Execute(string req)
{
ArrayList output = new ArrayList();

[...]

cmd = new OdbcCommand(req);
cmd.Connection = accessConnection;

OdbcDataReader reader = cmd.ExecuteReader();
while (reader.Read()) {
    String[] row = new String[reader.FieldCount];

    for (int i=0; i<reader.FieldCount; i++) {
        if (!reader.IsDBNull(i)) { // Added if for Visual Studio
            // Getting empties strings, but work fine with numbers
            row[i] = reader.GetValue(i).ToString();
            // I was using GetString before, but didn't work with Visual Studio
        }
    }

    output.Add( row );
}

[...]
return output;
}

这就是我执行测试请求的内容:
ArrayList data = db.Execute("SELECT * FROM Materials");

foreach (String[] row in data) {
    string line = "";
    foreach (String s in row) {
        line += s + " - ";
    }
    Debug.Log(line); // Logging in Unity3D console
}

我得到:
1234 - 23.1 - - -
5678 - 12.9 - - -

代替 :
1234 - 23.1 - A string - Another string -
5678 - 12.9 - Hello - World -

为什么我只得到数字而没有字符串,该如何纠正呢?

编辑:它可以在Visual Studio 12和Windows 7上正常工作,而为了使其与Visual Studio一起使用而必须进行的编辑在我的Unity程序中未显示任何改进。

最佳答案

首先,我要说的是我没有重现此环境。我的答案很大程度上取决于我在使用SQL Server的Windows上的C#中所花的钱;也就是说,DataReader下使用的缓冲区被重新使用以提高内存效率。

当数字转换为字符串时,必须为该字符串分配内存,因为当前不存在任何字符串。当ToString在实际的字符串上运行时,您可能会获得对仍埋在DataReader中深处的字符串的引用。然后,该内存将由下一条记录重用。

基本的解决方案是要么逐条记录地进行处理,要么在循环中复制所需的所有内容。

关于c# - 为什么MS Access odbc在C#中返回数字但没有字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30532065/

10-12 12:37
查看更多