c# - 为什么 MS access odbc 在 C# 中返回数字而不返回字符串?

标签 c# ms-access unity3d mono

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

但是当我读取我得到的数据时,我只收到来自数据库的数字。它可以是整数,也可以是 float 。但是当我尝试获取一个字符串时,它总是返回一个空字符串。

这是我在 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 程序有任何改进。

最佳答案

首先我得说我没有重现这个的环境;我的回答很大程度上基于我在 Windows 上使用 SQL Server 在 C# 中花费的内容;即,DataReader 下使用的缓冲区得到重用以提高内存效率。

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

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

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

相关文章:

sql - Access 中的简单子(monad)查询

unity3d - unity AudioSource.Play 有噪音

c# - 如何以正确的方式加入 firebase 查询的结果

c# - 执行大型 SQL 脚本(使用 GO 命令)

c# - 在 WCF 操作契约中传递原始变量。优点和缺点?

c# - 如何创建唯一的激活码?

c# - 使用 C# 以编程方式将查询表从 MS Access 导出到 Excel

c# - AutoFac:注入(inject) NULL 值

excel - 如何修复从 Access 内部关闭 Excel

c# - 光子统一 foreach 循环