3

64 ビット システムでプログラムを起動しているため、「Microsoft.Jet.OLEDB.4.0」プロバイダーの使用から「Microsoft.ACE.OLEDB.12.0」プロバイダーの使用に切り替えています。ACE が 64 ビット用の Jet に取って代わったことを理解しています使用する。

my に渡すクエリの構文は変更していませんがOleDbCommand、例外が発生するようになりました。

「1 つ以上の必須パラメーターに値が指定されていません。」

コードは次のとおりです。

static void Main(string[] args)
{
    const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\PimsImport\\PreciousStore\\imports;Extended Properties='Text;HDR=NO;IMEX=1'";
    const string selectStatement = "SELECT F1 AS NameColumn FROM C:\\PimsImport\\PreciousStore\\imports\\PIMSPreciousbradypxx.csv";

    using (var connection = new OleDbConnection(connectionString))
    {
        using (var cmd = new OleDbCommand(selectStatement, connection))
        {
            cmd.Connection.Open();
            OleDbDataReader workbookReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            workbookReader.Close();
        }
    }
}

を削除して;F1に置き換えると、*それは正常に動作します。F1しかし、私の csv にはヘッダーがないため、構文を使用して最初の列を取得したいと考えています。

これが機能しなくなった理由はありますか?

4

1 に答える 1

1

あなたの選択で、次の変更を加えてみてください

"SELECT [F1] AS NameColumn FROM [myTable]"

の代わりに[]も使え''ます。

そして、一時的な質問のためにこのコードスニペットを書いただけかどうかはわかりませんが、次のような方法で文字列を管理することをお勧めします

string sql = string.Format("SELECT [{0}] FROM [{1}]", myColumnVar, myTableVar);

さらに複雑な場合は、クエリのパラメーター化を検討してください。複雑な OleDB クエリをパラメーター化する方法を参照してください。たとえば。

于 2014-12-23T06:02:21.253 に答える