Avatar billede n1 Nybegynder
26. november 2004 - 22:15 Der er 41 kommentarer og
1 løsning

Database i .NET script..

jeg er ikke særlig god til ASP.NET, men jeg har et script som jeg skal ha modificeret så den skriver til en database...
koden til databasen skal kunne dette:

<%
set conn = server.createobject("ADODB.connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ= " &server.mappath("/data/data.mdb")

set write = server.createobject("ADODB.recordset")
wSQL ="SELECT * FROM Message"
write.CursorType = 2
write.LockType = 3
write.open wSQL, conn

write.AddNew

Dim comment, tempComment

write.fields("image") = strFileName
write.fields("dato") = DateTime.Now.ToString("yyyy-MM-dd")
write.fields("userid") = Session("UserID")

write.Update


write.close
set write = Nothing
conn.close
%>

håber i forstår hvad jeg mener..
Avatar billede arne_v Ekspert
26. november 2004 - 22:25 #1
Noget a la:

Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
Server.MapPath("/data/data.mdb") & ";User Id=;Password=")
con.Open
Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" & strFileName & "','" & _
DateTime.Now.ToString("yyyy-MM-dd") & "'," & Session("UserID") & ")", con)
cmd.ExecuteNonQuery
con.Close

Det er ikke den rigtige ASP.NET måde at gøre det på.

Men det er ihvertfald den korteste forklaring.

NB: Koden er ikke testet så check for syntax fejl.
Avatar billede n1 Nybegynder
26. november 2004 - 22:33 #2
hmm... det virker ikke rigtigt!
men her er scriptet som jeg bruger...

<script runat=server>

private void myUploadCode(Object sender, EventArgs e) {
    string strFileName;
    if(upload_file.PostedFile.ContentLength < (200*1024)) { //Er fil over 100kb?

if(upload_file.PostedFile.FileName.IndexOf("\\") > 0)
{
    strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1);                                               
}
else
{
    // jeg ved ikke hvad det her gør godt for... måske gør du :o)
    strFileName = "ukendt fil";
}
strFileName = DateTime.Now.ToString("yyyy-MM-dd-HHmmss")+"-"+strFileName;
            if(!File.Exists(Server.MapPath("999999uploaded/stor/" + strFileName))) {

                    int MaxSize = 100;
                    try
                    {
                            System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream);
                            upload_file.PostedFile.SaveAs(Server.MapPath("999999uploaded/stor/" + strFileName));
                            System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image;
                            System.Drawing.Imaging.ImageFormat format = image.RawFormat;
                 
                            if(image.Width>MaxSize || image.Height>MaxSize) {
                                Bitmap b = Resize(bOrg,MaxSize,MaxSize);
                                b.Save(Server.MapPath("999999uploaded/" + strFileName ),format);
                            }
                            else
                            { //Gem original da billede allerede er mindre end 100px
                                    upload_file.PostedFile.SaveAs(Server.MapPath("999999uploaded/" + strFileName));
                            }
                            Response.Write("<a href=\"img.asp?img=999999uploaded/stor/" + strFileName + "\">vis billede</a></p>");


Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/data/data.mdb") & ";User Id=;Password=")
con.Open
Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" & strFileName & "','" & DateTime.Now.ToString("yyyy-MM-dd") & "'," & Session("UserID") & ")", con)
cmd.ExecuteNonQuery
con.Close

                    }
                    catch
                    {
                        Response.Write("Der skete en fejl ved processering af billedet");       
                    }
          }
          else
          {
                Response.Write("Filnavn eksisterer allerede, prøv at ombøbe billedet!");
          }

        }
        else {
                //Fil var for stor
                Response.Write("Billedet er over 100kb");
        }
}
private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth)
{
        int nWidth = b.Width;
        int nHeight = b.Height;
        if(nHeight>MaxHeight) {
                nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight));               
                nHeight = MaxHeight;
        }
        if(nWidth>MaxWidth) {
                nWidth=MaxWidth;
                nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth));
        }
        Bitmap bTemp = (Bitmap)b.Clone();
        b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        double nXFactor = (double)bTemp.Width/(double)nWidth;
        double nYFactor = (double)bTemp.Height/(double)nHeight;
        for (int x = 0; x < b.Width; ++x)
                for (int y = 0; y < b.Height; ++y)
                        b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
                                (int)(Math.Floor(y * nYFactor))));
        return b;
}

</script>
Avatar billede arne_v Ekspert
26. november 2004 - 22:35 #3
Hvad fejl får du ?
Avatar billede n1 Nybegynder
26. november 2004 - 22:38 #4
jaa... den siger bare at der er en "Runtime Error", men jeg får ikke at vide hvor den er...
Avatar billede jaffafo Nybegynder
27. november 2004 - 01:39 #5
tilføj  Debug="true"  i page direktivet i aspx filen
Avatar billede n1 Nybegynder
27. november 2004 - 09:53 #6
hmm... hvor vil det så være?
Avatar billede n1 Nybegynder
27. november 2004 - 15:37 #7
ok fandt ud af det med debug og jeg får følgende fejl:

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1002: ; expected

Source Error:


Line 39:                            Response.Write("<a href=\"img.asp?img=999999uploaded/stor/" + strFileName + "\">vis billede</a></p>");
Line 40:                   
Line 41: Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/data/data.mdb") & ";User Id=;Password=");
Line 42: con.Open
Line 43: Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" & strFileName & "','" & DateTime.Now.ToString("yyyy-MM-dd") & "'," & Session("UserID") & ")", con)
Avatar billede n1 Nybegynder
27. november 2004 - 15:38 #8
hov... fejlen er i linje 41!
Avatar billede arne_v Ekspert
27. november 2004 - 15:39 #9
Slet det ;
Avatar billede arne_v Ekspert
27. november 2004 - 15:40 #10
Hov.

Min kode var altså VB.NET - din kode er vist C# !!!!

Der skal nok lige laves nogle små ændringer .........
Avatar billede arne_v Ekspert
27. november 2004 - 15:42 #11
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/data/data.mdb") + ";User Id=;Password=");
con.Open();
OleDbCommand cmd = new OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" + strFileName + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "'," + Session["UserID"] + ")", con)
cmd.ExecuteNonQuery();
con.Close();
Avatar billede n1 Nybegynder
27. november 2004 - 15:47 #12
hmm.. den kom lidt længere, men nu fik jeg:

Compiler Error Message: CS0246: The type or namespace name 'OleDbConnection' could not be found (are you missing a using directive or an assembly reference?)

i:
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/data/data.mdb") + ";User Id=;Password=");
Avatar billede arne_v Ekspert
27. november 2004 - 15:56 #13
<%@ import namespace="System.Data.OleDb" %>
Avatar billede n1 Nybegynder
27. november 2004 - 16:07 #14
ok, nu kommer der ingen fejlmelding, men der bliver ikke gemt noget i databasen!
og den skriver også "Der skete en fejl ved processering af billedet"...
men bildet bliver uploaded fint nok
Avatar billede arne_v Ekspert
27. november 2004 - 16:18 #15
Prøv lige at erstat:

                    catch
                    {
                        Response.Write("Der skete en fejl ved processering af billedet");     
                    }
med:

                    catch(Exception ex)
                    {
                        Response.Write("Der skete en fejl ved processering af billedet: " + ex.Message);     
                    }
Avatar billede n1 Nybegynder
27. november 2004 - 16:20 #16
Syntax error in INSERT INTO statement.
Avatar billede arne_v Ekspert
27. november 2004 - 16:23 #17
Så er det jo at man skal til at undersøge om '' erne passer og om dato formatet
er rigtigt.
Avatar billede arne_v Ekspert
27. november 2004 - 16:27 #18
Skal

... & "','" & DateTime.Now.ToString("yyyy-MM-dd") & "'," & ...

evt. være

... & "',#" & DateTime.Now.ToString("yyyy-MM-dd") & "#," & ...

(jeg kan ikke huske hvordan nu det er med Access og datoer)
Avatar billede n1 Nybegynder
27. november 2004 - 16:29 #19
dato feltet er bare en text box, så det er ikke det der er problemet!
Avatar billede arne_v Ekspert
27. november 2004 - 16:31 #20
Hvad type er userid ?
Avatar billede n1 Nybegynder
27. november 2004 - 16:32 #21
også bare text
Avatar billede arne_v Ekspert
27. november 2004 - 16:33 #22
Så skal der jo også '' omkring det
Avatar billede arne_v Ekspert
27. november 2004 - 16:33 #23
OleDbCommand cmd = new OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" + strFileName + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + Session["UserID"] + "')", con);
Avatar billede n1 Nybegynder
27. november 2004 - 16:36 #24
det hjalp heller ikke
Avatar billede arne_v Ekspert
27. november 2004 - 16:44 #25
Kan du udskrive cmd.CommandText og evt. teste den i Access ?
Avatar billede n1 Nybegynder
27. november 2004 - 16:46 #26
hvordan kan jeg gøre det?
Avatar billede arne_v Ekspert
27. november 2004 - 17:15 #27
F.eks.:

Response.Write(cmd.CommandText);
Avatar billede n1 Nybegynder
27. november 2004 - 17:22 #28
ok, det kan jeg ikke lige finde ud af...
Avatar billede jaffafo Nybegynder
27. november 2004 - 17:58 #29
bare smid

Response.Write(cmd.CommandText);

lige efter

OleDbCommand cmd = new OleDbCommand ("INSERT INTO Message (image,dato,userid) VALUES ('" + strFileName + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + Session["UserID"] + "')", con);
Avatar billede n1 Nybegynder
28. november 2004 - 11:42 #30
så står der:
INSERT INTO billeder (image,dato,userid) VALUES ('2004-11-28-114430-billede.jpg','2004-11-28','')
Avatar billede arne_v Ekspert
28. november 2004 - 11:46 #31
Er det OK ?

Eller må UserID f.eks. ikke være en tom streng ?
Avatar billede n1 Nybegynder
28. november 2004 - 11:50 #32
det ser da rigtigt ud, userid kommer på senere, jeg gidder bare ikke til at skulle lave en session hver gang jeg tester det... men det virker stadig ikke...
Avatar billede arne_v Ekspert
29. november 2004 - 22:35 #33
Hvis du fyrer den SQL sætning af i Access Query - virker den så ?
Avatar billede n1 Nybegynder
29. november 2004 - 23:49 #34
du bliver nødt til at gi et eksempel, jeg er ikke for go til det...
Avatar billede n1 Nybegynder
01. december 2004 - 09:55 #35
Nå men jeg tænkte at du måske kunne ha brug for hele koden, hvis du vil teste det?:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
<%@ import namespace="System.Data.OleDb" %>

<script runat=server>

private void myUploadCode(Object sender, EventArgs e) {
    string strFileName;
    if(upload_file.PostedFile.ContentLength < (200*1024)) { //Er fil over 100kb?

if(upload_file.PostedFile.FileName.IndexOf("\\") > 0)
{
    strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1);                                               
}
else
{
    // jeg ved ikke hvad det her gør godt for... måske gør du :o)
    strFileName = "ukendt fil";
}
strFileName = DateTime.Now.ToString("yyyy-MM-dd-HHmmss")+"-"+strFileName;
            if(!File.Exists(Server.MapPath("upload/stor/" + strFileName))) {

                    int MaxSize = 100;
                    try
                    {
                            System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream);
                            upload_file.PostedFile.SaveAs(Server.MapPath("upload/stor/" + strFileName));
                            System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image;
                            System.Drawing.Imaging.ImageFormat format = image.RawFormat;
                 
                            if(image.Width>MaxSize || image.Height>MaxSize) {
                                Bitmap b = Resize(bOrg,MaxSize,MaxSize);
                                b.Save(Server.MapPath("upload/" + strFileName ),format);
                            }
                            else
                            { //Gem original da billede allerede er mindre end 100px
                                    upload_file.PostedFile.SaveAs(Server.MapPath("upload/" + strFileName));
                            }
                            Response.Write("<a href=\"img.asp?img=upload/stor/" + strFileName + "\">vis billede</a></p>");

OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/ny/data/data2.mdb") + ";User Id=;Password=");
con.Open();
OleDbCommand cmd = new OleDbCommand ("INSERT INTO billeder (image,dato,userid) VALUES ('" + strFileName + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + strFileName + "')", con);
Response.Write(cmd.CommandText);
cmd.ExecuteNonQuery();
con.Close();


                    }
                    catch(Exception ex)
                    {
                        Response.Write("Der skete en fejl ved processering af billedet: " + ex.Message);   
                    }
          }
          else
          {
                Response.Write("Filnavn eksisterer allerede, prøv at ombøbe billedet!");
          }

        }
        else {
                //Fil var for stor
                Response.Write("Billedet er over 100kb");
        }
}
private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth)
{
        int nWidth = b.Width;
        int nHeight = b.Height;
        if(nHeight>MaxHeight) {
                nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight));               
                nHeight = MaxHeight;
        }
        if(nWidth>MaxWidth) {
                nWidth=MaxWidth;
                nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth));
        }
        Bitmap bTemp = (Bitmap)b.Clone();
        b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        double nXFactor = (double)bTemp.Width/(double)nWidth;
        double nYFactor = (double)bTemp.Height/(double)nHeight;
        for (int x = 0; x < b.Width; ++x)
                for (int y = 0; y < b.Height; ++y)
                        b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
                                (int)(Math.Floor(y * nYFactor))));
        return b;
}

</script>

<html>
<body link="#FFFFFF" text="#FFFFFF" bgcolor="#000000" vlink="#FFFFFF" alink="#FFFFFF">

<form enctype="multipart/form-data" runat="server">


<asp:PlaceHolder id="phEdit" runat="server">
    <p><font color="#FFFFFF" face="Arial" size="5">Vælg billede:</font></p>
    <input id="upload_file" type="file" runat="server" /><br><br>
    <asp:button Text="Upload" onClick="myUploadCode" runat="server" /><br>
    <p><font color="#FFFFFF" face="Arial" size="4">Maks fil størrelse: 200kb</font></p>
    </asp:PlaceHolder>
</form>

</body></html>
Avatar billede n1 Nybegynder
05. december 2004 - 17:49 #36
nå, jeg ved ikke om du kan finde ud af det, men jeg har lagt mærke til at der bliver oprettet en fil der heder data.ldb som er noget "Microsoft Office Access Record-Locking Information" når man prøver at skrive til databasen, kan det være derfor den ikke vil skrive til den?
Avatar billede n1 Nybegynder
07. december 2004 - 13:59 #37
Kan du ikke lige skrive som et svar, jeg har fundet ud af det...
Avatar billede arne_v Ekspert
07. december 2004 - 14:27 #38
OK

men hvad var problemet ?
Avatar billede n1 Nybegynder
07. december 2004 - 14:28 #39
der skulle stå

OleDbCommand cmd = new OleDbCommand ("INSERT INTO billeder ([image],[dato],[userid]) VALUES ('" + strFileName + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + strFileName + "')", con);
Avatar billede arne_v Ekspert
07. december 2004 - 14:33 #40
Og forskellen er der kantede parenteser ?
Avatar billede n1 Nybegynder
07. december 2004 - 14:37 #41
ja..
Avatar billede arne_v Ekspert
07. december 2004 - 14:48 #42
enten image eller dato må så være et reserveret ord (jeg er ret sikker på at
det ikke er userid)

irriterende finesse
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester