none
OleDbCommandのSQL文でバイナリデータを格納する方法 RRS feed

  • 質問

  • .NET FrameworkのOleDbCommandでMicrosoft.Jet.OLEDB.4.0をプロバイダにしてデータを記録したいと考えています。
    たとえばテーブルtのフィールドAが文字列型、フィールドBが数値型、フィールドCがバイナリ型であると
    INSERT INTO t (a,b,c) VALUES("A",0,???);
    のようになりますが、フィールドCにどのように記入すればよいかがわかりません。
    バイナリデータをSQL文で表現する、もしくはそれ以外の方法をお教えください。
    2010年6月8日 9:53

回答

  • > INSERT INTO t (a,b,c) VALUES("A",0,???);
    > のようになりますが、フィールドCにどのように記入すればよいかがわかりません。

    クエリの文字列の中にデータをハードコーディングするのではなくて、ファイルなど
    からバイナリデータを取得して、それを INSERT するのですよね?

    そうであれば、以下のような感じで可能なはずです。

    string str;
    int num;
    byte[] data;

    // データ (str, num, data) の取得

    using (OleDbConnection connection = new OleDbConnection())
    {
        connection.ConnectionString = Properties.Settings.Default.AccessConnectionString;
        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = "INSERT INTO [Table]([Name], [Number], [Binary]) VALUES (?, ?, ?)";
        command.Parameters.Add("@Name", OleDbType.VarChar).Value = str;
        command.Parameters.Add("@Number", OleDbType.Integer).Value = num;
        command.Parameters.Add("@Binary", OleDbType.Binary).Value = data;
        connection.Open();
        command.ExecuteNonQuery();
    }

    • 回答としてマーク Tank2005 2010年6月10日 2:31
    2010年6月9日 14:23

すべての返信

  • Tank2005 さんに返信
    > フィールドCにどのように記入すればよいかがわかりません。
    プリフィックス 0x を付加してこんな感じです。
    INSERT INTO t (a, b, c) VALUES ("A", 0, 0xFF)
    2010年6月9日 5:10
  • > INSERT INTO t (a,b,c) VALUES("A",0,???);
    > のようになりますが、フィールドCにどのように記入すればよいかがわかりません。

    クエリの文字列の中にデータをハードコーディングするのではなくて、ファイルなど
    からバイナリデータを取得して、それを INSERT するのですよね?

    そうであれば、以下のような感じで可能なはずです。

    string str;
    int num;
    byte[] data;

    // データ (str, num, data) の取得

    using (OleDbConnection connection = new OleDbConnection())
    {
        connection.ConnectionString = Properties.Settings.Default.AccessConnectionString;
        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = "INSERT INTO [Table]([Name], [Number], [Binary]) VALUES (?, ?, ?)";
        command.Parameters.Add("@Name", OleDbType.VarChar).Value = str;
        command.Parameters.Add("@Number", OleDbType.Integer).Value = num;
        command.Parameters.Add("@Binary", OleDbType.Binary).Value = data;
        connection.Open();
        command.ExecuteNonQuery();
    }

    • 回答としてマーク Tank2005 2010年6月10日 2:31
    2010年6月9日 14:23