Lyckades tack vare hjälpten lösa importen av excelfilen http://www.pellesoft.se/communicate/forum/view.aspx?msgid=187181&forumid=10&sum=0 Du får tänkta på att när du skickar kommandot till SQL-servern, så är det SQL-servern som öppnar filen. Dvs: C:\test.xls pekar alltså på SQL-serverns C:, kan det vara det som är problemet? Hmm... Det finns lite olika varianter (frågan är ifall du tycker om någon av dem =) Det fick bli en upload av fil, import till databasen sen radering av fil. Som det är nu med koden så måste jag namnge kolumnerna i rad 1, finns det något sätt att lösa det på så att den läser av kolumnen automatiskt? Testa att lek lite med HDR och IMEXImportproblem igen
Det fungerar när jag kör lokalt på datorn, men inte när jag kör det från en annan dator. Får felmeddelande:
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' reported an error. The provider did not give any information about the error.
Någon som kan gissa på en lösning?Sv: Importproblem igen
// MvH BjörneSv: Importproblem igen
1. Kopiera över filen till SQL-servern först
2. Försök få SQL-servern att accessa filen via unc-sökväg (\\server\share\test.xls)
Kan dock vara lite struligt att få SQL-servern att authentikera rätt mot sökvägen.
3. Gör om programmet så att du lokalt läser in datat i en DataTable med en DataAdapter
och sedan trycker in det i SQL-servern med en annan DataAdapter
// MvH BjörneSv:Importproblem igen
Här är en fungerande kod för import i alla fall :)
<code>
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server">
SqlConnection conn;
SqlCommand cmd;
void File_Upload(string Filnamn)
{
File1.PostedFile.SaveAs(@"c:\Filtemp\" + Filnamn);
}
void Import_Excel(string Filnamn)
{
conn = new SqlConnection("Server='localhost';trusted_connection=true;Database='Test'");
try
{
string filepath = @"C:\Filtemp\" + Filnamn;
cmd = new SqlCommand("INSERT INTO Test (Nummer, Lista) SELECT A, B FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=\"" + filepath + "\";Extended properties=Excel 5.0')...Blad1$", conn); ;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Msg.Text = "Det gick bra!";
}
catch (Exception ex)
{
Msg.Text = ex.Message;
}
finally
{
conn.Close();
}
Msg.Text = "Det gick bra.";
}
void Delete_File(string Filnamn)
{
File.Delete(@"C:\Filtemp\" + Filnamn);
}
void Button1_Click(object sender, EventArgs e)
{
string path = File1.PostedFile.FileName;
string Filnamn = System.IO.Path.GetFileName(path);
File_Upload(Filnamn);
Import_Excel(Filnamn);
Delete_File(Filnamn);
}
</script>
<html>
<head runat="server">
<title>Filimport</title>
</head>
<body>
<form id="form1" runat="server">
<input id="File1" type="file" runat="server" />
<br />
<br />
<asp:Button ID="Button1" Runat="server" Text="Importera" OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Msg" Runat="server"></asp:Label>
</form>
</body>
</html>
</code>Sv: Importproblem igen
cmd = new SqlCommand("INSERT INTO Test (Nummer, Lista) SELECT A, B FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=\"" + filepath + "\";Extended properties=Excel 5.0;HDR=NO;IMEX=2')...Blad1$", conn);
Det finns en ganska genomgående kb-artikel om Excel-drivern på:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;257819
// MvH Björne