无法访问数据库(SQL Server CE / Windows Mobile 6.5)

时间:2017-04-03 07:25:45

标签: c# sql-server-ce windows-mobile-6.5 windows-embedded

我正在为Windows Mobile 6.5设备创建一个应用程序,其中一部分应该在设备插入时复制SQL数据库,以便在拔出插头时拥有本地副本(因为没有连接)。

因此,为了拥有一个本地数据库,我遵循"Northwind" tutorial用于SQL Server CE(使用我自己的测试数据库),但经常遇到设备无法连接到数据库的问题。我无法调试(因为我必须将程序传输到设备以便每次都进行测试)但是我收到此错误消息(无论我尝试使用什么连接字符串):

  

SQL数据库错误:未指定错误[。\ userdb.sdf]

我尝试了多个连接字符串,如果我使用设计器将数据源绑定到表单,我可以看到可以访问数据库。但我需要手动设置一些查询,因为它们比填写表单要复杂得多。

这是我的代码,它只是填写表格,但下一步是登录/密码检查:

public partial class UserLogin : Form
{
    private SqlCeConnection _conn;

    public UserLogin()
    {
        InitializeComponent();

        _conn = new SqlCeConnection(@"Data Source=.\userdb.sdf;Password=PASSWORD;Persist Security Info=True");  
    }

    private void buttonCancel1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void buttonLoad1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlCeCommand cmd = new SqlCeCommand();
            cmd.Connection = _conn;
            cmd.CommandText = "SELECT userid, username, password FROM Users";

            _conn.Open();
            SqlCeResultSet resultSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
            this.bindingSource1.DataSource = resultSet;

        }
        catch (SqlCeException sql_ex)
        {
            MessageBox.Show("SQL database error: " + sql_ex.Message);
        }
    }

我尝试了不同的东西,其中表单填充了设计师的DataSet,但我仍然无法手动访问数据库: https://pastebin.com/10P3wGeP

1 个答案:

答案 0 :(得分:0)

Windows Mobile既不知道驱动器号也不知道当前的驱动器号。目录。这就是为什么"数据源=。\ userdb.sdf"永远都会失败。

在Windows Mobile上,您始终必须使用完全限定的路径名​​来访问文件。

您可以使用

List<String> thingsIHave = new ArrayList<>(25);
//...
List<String> thingsIWantToKeep = new ArrayList<>(25);
for (int index = 1; index < 24; index++) {
    thingsIWantToKeep.add(Integer.toString(index));
}
thingsIHave.retainAll(thingsIWantToKeep);

获取可执行文件启动目录的路径。