आप एक HttpPostedFile के साथ काम कर रहे हैं; यह वह फ़ाइल है जो वेब सर्वर पर "अपलोड" की जाती है। आपको वास्तव में उस फ़ाइल को कहीं सहेजना होगा और फिर उसका उपयोग करना होगा, क्योंकि...
...आपके उदाहरण में, ऐसा होता है कि आप अपनी वेबसाइट को उसी मशीन पर होस्ट कर रहे हैं जिस पर फ़ाइल रहती है, इसलिए पथ पहुंच योग्य है। जैसे ही आप अपनी साइट को किसी अन्य मशीन पर परिनियोजित करते हैं, आपका कोड काम नहीं करेगा।
इसे दो चरणों में विभाजित करें:
1) फ़ाइल को कहीं सेव करें - इसे देखना बहुत आम है:
string saveFolder = @"C:\temp\uploads"; //Pick a folder on your machine to store the uploaded files
string filePath = Path.Combine(saveFolder, FileUpload1.FileName);
FileUpload1.SaveAs(filePath);
अब आपके पास आपकी फ़ाइल स्थानीय रूप से है और असली काम किया जा सकता है।
2) फ़ाइल से डेटा प्राप्त करें। आपका कोड वैसे ही काम करना चाहिए, लेकिन आप अपनी कनेक्शन स्ट्रिंग को इस तरह से लिख सकते हैं:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
फिर आप उस फ़ाइल को हटाने के बारे में सोच सकते हैं जिसे आपने अभी-अभी अपलोड और आयात किया है।
अधिक ठोस उदाहरण प्रदान करने के लिए, हम आपके कोड को दो तरीकों से पुन:सक्रिय कर सकते हैं:
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';Integrated Security=True;User Instance=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] from [Sheet1$]", excelConnection))
{
excelConnection.Open();
using (OleDbDataReader dReader = cmd.ExecuteReader())
{
using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
{
//Give your Destination table name
sqlBulk.DestinationTableName = "Excel_table";
sqlBulk.WriteToServer(dReader);
}
}
}
}
}
private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl)
{
string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName);
fileUploadControl.SaveAs(filePath);
return filePath;
}
इसके बाद आप बस SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
पर कॉल कर सकते हैं।
अन्य विस्तारित गुण की समीक्षा करने पर विचार करें आपके एक्सेल कनेक्शन स्ट्रिंग के लिए। वे उपयोगी आते हैं!
अन्य सुधार जो आप करना चाहते हैं, उनमें आपके एसक्यूएल डेटाबेस कनेक्शन स्ट्रिंग को कॉन्फ़िगरेशन में डालना और उचित अपवाद हैंडलिंग जोड़ना शामिल है। कृपया इस उदाहरण पर केवल प्रदर्शन के लिए विचार करें!