|
■No84173 (夜叉丸 さん) に返信
先の私のレスで、
> リテラルをパラメータ化してパラメータにバイト列を代入してはいかがですか?
と書きましたが、具体例を書いておきます。
テーブルは自分の PC の SQL Server にある既存のものを使ったので質問者さんのテーブル
とは少々異なり、以下の通りです。
CREATE TABLE [dbo].[Files](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FileName] [nvarchar](100) NOT NULL,
[MimeType] [nvarchar](50) NOT NULL,
[BinaryData] [varbinary](max) NOT NULL,
[DownLoadCount] [int] NOT NULL,
CONSTRAINT [PK__Files] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
varbinary(max) を使うということは、そのフィールドに画像とか pdf などのファイルを保存
するのだと思いますが、そうだとすると、下のコードの new byte[] { 0x01, 0x02, 0x03 } を
ファイルを読み込んで作ったバイト列にすればいいです。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string connStr = "Data Source=(local)\\sqlexpress;Initial Catalog=UserDatabase;Integrated Security=true";
string insertQuery = "INSERT INTO [Files] ([FileName], [MimeType], [BinaryData], [DownloadCount]) " +
"VALUES (@filename, @mimetype, @binarydata, @downloadcount)";
using (SqlConnection connection = new SqlConnection(connStr))
{
using (SqlCommand command = new SqlCommand(insertQuery, connection))
{
command.Parameters.AddWithValue("@filename", "ファイル名");
command.Parameters.AddWithValue("@mimetype", "タイプ");
command.Parameters.AddWithValue("@binarydata", new byte[] { 0x01, 0x02, 0x03 });
command.Parameters.AddWithValue("@downloadcount", 0);
connection.Open();
command.ExecuteNonQuery();
}
}
string selectQuery = "SELECT [FileName], [MimeType], [BinaryData], [DownloadCount] FROM [Files]";
using (SqlConnection connection = new SqlConnection(connStr))
{
using (SqlCommand command = new SqlCommand(selectQuery, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string filename = (string)reader[0];
string mimetyoe = (string)reader[1];
byte[] binarydata = (byte[])reader[2];
int downloadcount = (int)reader[3];
}
}
}
}
}
}
}
|