如何将 Excel 文件从 WinForms 客户端传递到 WCF 服务并传递到 SQL Server 表中?
任何人都可以提供任何指导、代码或建议吗?
- 将 Excel 文件作为参数的 WCF 服务合同和实现
- 合同实施应将该 Excel 文件插入到 SQL Server 中的 varbinary(MAX) 列中。
如何将 Excel 文件从 WinForms 客户端传递到 WCF 服务并传递到 SQL Server 表中?
任何人都可以提供任何指导、代码或建议吗?
我不在乎您的要求是什么,不要将 excel 文档插入到 sql server 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。在您的合同实施中插入 SQL Server 表(例如 Service.cs)
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);
它正在工作......是的:-)