4

私のアプリケーションでは、SQLiteアプリケーションにバイト配列を格納しようとしています。SQLiteデータベースに次のように入力しています。

public bool InsertMessage()
    {
        //create string SQl and fill it with the SQLite query for inserting a message.
        string SQL = "Insert into ClockMessages(InsertDateTime, SendDateTime, Data) Values('"+ insertdatetime + "', null, '" + data + "');";
        List<SQLiteParameter> pars = new List<SQLiteParameter>();
        pars.Add(new SQLiteParameter("InsertDateTime", insertdatetime));
        pars.Add(new SQLiteParameter("Data", data));
        //send the SQl query and it's parameters to the SQLiteDatabase class
        return SQLiteDatabase.ExecuteNonQuery(SQL, pars);
    }

ここで、InsertDateTimeはDateTime.UtcNowであり、Dataはバイト配列です。この出力は、次を含むフィールドDataになります。System.Byte[]、文字列を表示せずに、そのフィールドに実際のバイト配列を表示することはできませんか?私はどこでもByte[]タイプを使用してデータベースを埋めているので、それを文字列に変換しません。データフィールドに次のようなものが表示されます:01、54、32、23、11、02、53。データベースのデータフィールドのデータ型はBLOBです。

誰かが私がこれを達成するのを手伝ってくれる?

4

2 に答える 2

3

ステートメントでパラメーターを使用する必要があります。

string SQL = "INSERT INTO ClockMessages (InsertDateTime, SendDateTime, Data) VALUES (@InsertDateTime, NULL, @Data)";

他のすべては正しいようです。

あなたが今持っているものは、ToString()メソッドをinsertdatetime呼び出してdata、結果をSQLステートメントに連結します。実際には、ステートメントでパラメーターを使用していません。

于 2013-02-25T12:17:47.907 に答える
2

DBTypeパラメータを取る SQLiteParameter のオーバーロードを使用します。

var dataParameter = new SQLiteParameter("Data", DbType.Binary) { Value = data };
pars.Add(dataParameter);
于 2013-02-22T13:47:08.043 に答える