2017-04-03 7 views
0

私は、Windows Mobile 6.5のデバイス用のアプリケーションを作成しています、一部のデータベースにアクセスすることができません。 (接続されていないために)プラグが抜かれたとき。(SQL ServerのCE/Windows Mobileの6.5)デバイスが差し込まれたときにローカルコピーを持つように、SQLデータベースを複製することになっているの

ローカルデータベースを使用するには、私自身のテストデータベースを使用して"Northwind" tutorialのSQL Server CEに従ってください。ただし、デバイスがデータベースに接続できないという問題が常に発生します。私は複数の接続を試してみました

SQL database error: Unspecified error [.\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); 
     } 
    } 

またフォームは、デザイナーからのデータセットで満たされている、私が試した別の何かを、ただし、データベースに手動でアクセスすることはできません。 https://pastebin.com/10P3wGeP

+0

その、そこから実行しているが、ちょうどデータベースは文句を言わないでもexeファイルを呼び出していないかのようにあなたは、exeファイルのパスに対して、現在の作業ディレクトリをチェックすることをお勧めします。\それはあなたがそれゆえにどこか別の場所からそれを実行している可能性がありdoesntのそれを見つける。 – BugFinder

+0

私は手動で私はFTP経由の転送ディレクトリから.exeファイルを起動する(のでパス。 「 /デバッグ0.1.3/Reader.exe」のようなものです。しかし、私は別のディレクトリに、時には完全なパスで複数の接続文字列を試してみました。これは、デバイスに埋め込まれたSQL Server CEの "エンジン"によって引き起こされる可能性がありますか? – jldjul

+0

正直言って、haventはモバイルデバイスで試しましたが、通常は主な問題です。 – BugFinder

答えて

0

Windows Mobileでは、ドライブ文字や「現在の」ディレクトリについては知りません。そのため、 "Data Source =。\ userdb.sdf"は常に失敗します。

Windows Mobileでは、ファイルにアクセスするためには常に完全修飾パス名を使用する必要があります。

あなたは実行が開始された場所のディレクトリへのパスを取得するには

string path = System.IO.Path.GetDirectoryName( 
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

を使用することができます。

+0

魅力のように動作します、ありがとうございます! Flashストレージへのフルパスに代わる優れた方法です。 – jldjul

関連する問題