あなたは HttpPostedFile を扱っています。これは、Web サーバーに「アップロード」されるファイルです。そのファイルをどこかに保存してから使用する必要があります。なぜなら...
...あなたの例では、たまたま、ファイルが存在する同じマシンで Web サイトをホストしているため、パスにアクセスできます。サイトを別のマシンにデプロイするとすぐに、コードは機能しなくなります。
これを 2 つのステップに分けます:
1) ファイルをどこかに保存します - これはよくあることです:
string saveFolder =@"C:\temp\uploads"; //アップロードしたファイルを保存するマシン上のフォルダーを選択しますstring filePath =Path.Combine(saveFolder, FileUpload1.FileName); FileUpload1.SaveAs(ファイルパス);
プレ>これでファイルがローカルに作成され、実際の作業を行うことができます。
2) ファイルからデータを取得します。コードはそのまま動作するはずですが、接続文字列を次のように記述するだけでもかまいません:
string excelConnString =String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
プレ>次に、アップロードしてインポートしたばかりのファイルを削除することを検討してください。
より具体的な例を提供するために、コードを 2 つの方法にリファクタリングできます。
private void SaveFileToDatabase(string filePath) { String strConnection ="Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\ CRMdata\\CRMdata\\App_Data\\Database1.mdf';統合セキュリティ=True;ユーザー インスタンス=True"; String excelConnString =String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath); //Create Connection to Excel work book using (OleDbConnection excelConnection =new OleDbConnection(excelConnString)) { //Create OleDbCommand to fetch data from Excel using (OleDbCommand cmd =new OleDbCommand("Select [ID],[Name],[Designation] [Sheet1$] から」、excelConnection)) { excelConnection.Open(); using (OleDbDataReader dReader =cmd.ExecuteReader()) { using(SqlBulkCopy sqlBulk =new SqlBulkCopy(strConnection)) { //宛先テーブルに名前を付けます sqlBulk.DestinationTableName ="Excel_table"; sqlBulk.WriteToServer(dReader); } } } } プライベート文字列 GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl) { string filePath =Path.Combine(saveDirectory, fileUploadControl.FileName); fileUploadControl.SaveAs(ファイルパス); filePath を返します。 }コード> プレ>
SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
を呼び出すだけです。他の 拡張プロパティ を確認することを検討してください Excel 接続文字列用。役に立ちます!
その他の改善点としては、Sql データベース接続文字列を構成に入れたり、適切な例外処理を追加したりすることが含まれます。この例はデモンストレーションのみと考えてください!