0

OK、私は昨夜遅くから今朝早くからこれに取り組んでいます。SQL Server CE データベースにデータを挿入しようとしています。私はロープの終わりにいます。

実装しようとしているコードは次のとおりです。

public static void InsertData(string sqlStatement)
{
        try
        {
            //string strConn = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
            //string StartupPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Remove(0, 6); // remove file:\\
            //string connectionString = @"Data Source=Database1.sdf";
            //string connectionString = @"Data Source = |DataDirectory|\Database1.sdf";
            //string connectionString = @"Data Source = C:\Users\My\Documents\Visual Studio 2012\Projects\VIN_Decoder\VIN Decoder\VIN Decoder\Database1.sdf"
            //string connectionString = string.Format("Data Source={0}; Persist Security Info=False;", Path.Combine(Application.StartupPath, "Database1.sdf"));

            //THIS ONE ACTUALLY WORKS!!!!!!!!!!!! :
            //string connectionString = @"Data Source = C:\Users\My\Documents\Visual Studio 2012\Projects\VIN_Decoder\VIN Decoder\VIN Decoder\Database1.sdf"

            string connectionString = Properties.Settings.Default.Database1ConnectionString;
            SqlCeConnection sqlceCon = new SqlCeConnection(connectionString);
            sqlceCon.Open();

            SqlCeCommand sqlCeCom = new SqlCeCommand(sqlStatement, sqlceCon);
            sqlCeCom.ExecuteNonQuery();
            sqlCeCom.Dispose();
            sqlceCon.Close();
        }
        catch (Exception e)
        {
        }
    }

コメント付きのすべての接続文字列を表示して、私が試したことを確認できます。奇妙なことに、データから単一の値を取得する別のメソッド (INSERT INTO ステートメントではなく、SELECT ステートメント) で次の接続文字列を使用するだけで、問題なく動作します。

string connectionString = @"Data Source = |DataDirectory|\Database1.sdf";

クエリを直接テストしましたが、コメントにあるように、静的パスが機能するため、クエリが適切であることがわかります。しかしもちろん、パブリッシングやマルチ開発者向けの開発には相対的なものが必要です。

私が試したほとんどの接続文字列では、エラーなしで try ブロックを完了できますが、データは挿入されません。

助言がありますか?

4

2 に答える 2