WinFormsクライアントからWCFサービスおよびSQL ServerテーブルにExcelファイルを渡す方法は?
誰でもガイダンス、コード、またはアドバイスを提供できますか?
- Excel ファイルをパラメーターとして受け取る WCF サービス コントラクトと実装
- コントラクトの実装では、その Excel ファイルを SQL Server の varbinary(MAX) 列に挿入する必要があります。
WinFormsクライアントからWCFサービスおよびSQL ServerテーブルにExcelファイルを渡す方法は?
誰でもガイダンス、コード、またはアドバイスを提供できますか?
あなたの要件が何を言っているかは気にしません。ExcelドキュメントをSQLサーバーのvarbinary(max)列に挿入しないでください。要件には、「Excel ドキュメントをアップロードし、そのコンテンツをデータベースに挿入する。ただし、元の Excel ファイルをデータベース内のデータに関連付ける必要があるため、プロセスが失敗したという主張を否定し、検証メカニズムを備える必要があります。 ."
列の説明については、そこに配置した拡張プロパティを確認してください
create table EXCEL_IMPORT
(
ImportID int identity(1,1) NOT NULL CONSTRAINT [PK_EXCEL_IMPORT] PRIMARY KEY,
FileName_Incoming varchar(max),
FilePath_Internal varchar(max),
FileName_Internal varchar(max),
FileRowCount int NOT NULL CONSTRAINT [CK_EXCEL_IMPORT_FileRowCount] CHECK (FileRowCount >= 0),
ImportDate datetime NOT NULL CONSTRAINT [DF_EXCEL_IMPORT_ImportDate] DEFAULT(getdate())
)
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The location on the client computer i.e. C:\Users\jimmy\Desktop\iHeartExcel.xls' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EXCEL_IMPORT', @level2type=N'COLUMN',@level2name=N'FileName_Incoming'
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The folder on your fileshare the file is in (this is incase you decide to change the fileshare name)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EXCEL_IMPORT', @level2type=N'COLUMN',@level2name=N'FilePath_Internal'
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The unique filename that you decided on in the fileshare i.e. 2012_04_20_11_34_59_0_71f452e7-7cac-4afe-b145-6b7557f34263.xls' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EXCEL_IMPORT', @level2type=N'COLUMN',@level2name=N'FileName_Internal'
その他の考え
そこの専門家がこれを改善できると確信していますが、ここに基本があります...
サーバー上
1a. インターフェイスに新しい OperationContract を追加します (例: IService.cs)。
[OperationContract]
string UploadBinaryFile(byte[] aByteArray);
1b. コントラクト実装 (Service.cs など) の SQL Server テーブルに挿入します。
public string UploadBinaryFile(byte[] aByteArray)
{
try
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = MyConnectionString; // from saved connection string
conn.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO MyTestTable(BinaryFile) VALUES (@binaryfile)", conn))
{
cmd.Parameters.Add("@binaryfile", SqlDbType.VarBinary, -1).Value = aByteArray;
cmd.ExecuteNonQuery();
}
return "1"; // to me, this indicates success
}
catch (Exception ex)
{
return "0: " + ex.Message; // return an error indicator + ex.message
}
}
クライアント上
2a. OpenFileDialog コンポーネントを使用して、ほとんどの Windows アプリケーションで使用される標準のダイアログ ボックスを使用して、ファイル システム上のファイルを参照します。
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txtUploadFilePath.Text = openFileDialog1.FileName;
}
2b. ファイルの内容をバイト配列にロードします
var byte[] BinaryFile = System.IO.File.ReadAllBytes(txtUploadFilePath.Text);
2c。バイト配列を渡して、WCF コントラクトを呼び出します
string UploadResponse = client.UploadBinaryFile(BinaryFile);
それは働いています... YAY :-)